Java位运算符

处理整型类型(byte, short, int, long)时,可用位运算符对整型数值的各个位进行操作。看看以下的位运算符:
1. &("and") 与运算
int a = 0b1000; //0b1000是8的二进制表示
int b = 0b1011; //0b1011是11的二进制表示
int c = a & b; //对a和b做与位运算
System.out.println(c);//得到结果c为8,即0b1000


具体运算逻辑如下:只有两个操作数对应的位都为1的时候,&运算结果才为1,否则为0.
a   0b1000
b   0b1011
-----------
c   0b1000

2. |("or") 或运算
int a = 0b1000; //0b1000是8的二进制表示
int b = 0b1011; //0b1011是11的二进制表示
int c = a | b; //对a和b做或位运算
System.out.println(c);//得到结果c为11,即0b1011


具体运算逻辑如下:只要两个操作数对应的位有一个为1,|运算结果就为1,否则为0.
a   0b1000
b   0b1011
-----------
c   0b1011

3. ^("xor") 异或运算
int a = 0b1000; //0b1000是8的二进制表示
int b = 0b1011; //0b1011是11的二进制表示
int c = a ^ b; //对a和b做异或位运算
System.out.println(c);//得到结果c为3,即0b0011


具体运算逻辑如下:只要两个操作数对应的位相同,^运算结果就为0,否则为1.
a   0b1000
b   0b1011
-----------
c   0b0011

4. ~("not") 非运算
int a = 0b1000; //0b0000 1000是8的二进制表示
int c = ~a; //对a做非位运算
System.out.println(c);//得到结果c为-9,即0b1000 1001

具体运算逻辑如下: ~运算规则是按位取反,此时为补码.需转化为原码,即先按位取反,符号位除外,然后末位+1.
0b0000 1000先按位取反,得到如下.
0b1111 0111此时为补码.需转化为原码.
0b1000 1000先按位取反,符号位除外.
0b1000 1001末位加1.即-9.

猜你喜欢

转载自summerhome.iteye.com/blog/2395299