位运算符
java定义了位运算符,应用于short(短整型)、int(整数类型)、long(长整型)、byte(字节型)、char(字符型)。位运算表示对每个二进制位(bit)进行计算,其操作数和运算结果都是整数型。
位运算符主要针对二进制(补码),按照低位到高位一一对齐运算。
&运算
”与“运算符:相对应位都为1,结果才为1。否则为0。
1 | 0 & 0 = 0; |
|运算
”或“运算符:相对应位只要有一个为1,结果就为1。否则为0。
1 | 0 | 0 = 0; |
逻辑运算符”&&”和”||”与位运算符”&”和”|”的区别:”&&”和”||”运算具有短路计算功能。
~运算
”非“运算符:取反,1变成0,0变成1;
^异或运算
”异或“运算符:用符号 XOR 或 ^ 表示。两个操作数进行异或运算时,对于同一位上,如果相同为0,不同则为1。
1
2
30 ^ 0 = 0;
1 ^ 0 = 1;
1 ^ 1 = 0;
性质:
- 任何数,与自己异或运算,结果为0。 a^a=0。
- 任何数,与0做异或运算,结果不变。 a^0=a。
- 满足交换律和结合律。(a^b)^a=(a^a)^b=0^b=b。
- 根据以上可得,自反性。a ^ b ^ b=a。a与b做两次异或运算,可得原始数据a。
<<运算
左移位运算:按二进制形式把操作数向左移动指定位数。高位移出(舍弃)、低位的空位补零。
1 | 3 << 2 |
- 数学意义:在数字没有溢出的前提下,左移一位相当于乘以2的一次方。左移n位相当于乘以2的n次方。
>>运算
右移位运算:按二进制形式把操作数向右移动指定位数。
低位移出(丢弃)、高位的空位补符号位(正数补0、负数补1)。
1 | 16 >> 2 |
- 数学意义:右移一位相当于除以2的一次方。右移n位相当于除以2的n次方。
>>>运算
无符号右移运算符:按二进制形式把操作数向右移动指定位数。**低位移出(丢弃)、高位的空位补零。
1 | 16 <<< 2 |