位运算符和移位运算符

位运算

符号 规则
按位与& 两位全为1,结果为1,否则为0
按位或| 两位有一个为1,结果为1,否则为0
按位异或^ 两位一个为0,一个为1,结果为1,否则为0
按位取反~ 0->1   ,  1->0

1. 按位与&:2&3

2:  0010
3:  0011
---------
    0010

2. 按位或   :  2|3

2:  0010
3:  0011
---------
    0011

3.按位异或^ : 2^3

2:  0010
3:  0011
---------
    0001

 4.取反: ~2

2:  0010
---------
   1101

移位运算符

运算规则

算术右移>>: 低位溢出,符号位不变,并用符号位补溢出的高位

算术左移<<:符号位不变,低位补0

>>>逻辑右移也叫无符号右移,运算规则是:低位溢出,高位补0

特别说明:没有<<

算术左移:

说明:int b = 5 << 2  ,表示将二进制数 5 左移两位 , 等价 5 * 2^2

二进制表示: 0000 0000 0000 0000 0000 0000 0000 0101
左移两位:   0000 0000 0000 0000 0000 0000 0001 0100

int b = -5 << 2;

二进制表示(32位整数): 1111 1111 1111 1111 1111 1111 1111 1011
左移两位:              1111 1111 1111 1111 1111 1111 1110 1100

算术右移:

说明:int b = 5 >> 2 , 表示将二进制数 5 右移动两位,等价 5 / 2^2

二进制表示: 0000 0000 0000 0000 0000 0000 0000 0101
右移两位:   0000 0000 0000 0000 0000 0000 0000 0001

 说明:当你使用算术右移 (>>) 操作符时,对于正数,将其二进制表示向右移动指定的位数,左侧空出的位用0填充。对于负数,右移时同样右侧空出的位用0填充,但符号位会被保留。

二进制表示(32位整数): 1111 1111 1111 1111 1111 1111 1111 1011
右移两位:              1111 1111 1111 1111 1111 1111 1111 1110

逻辑右移:

说明:int b = 5>>>2

二进制表示:     0000 0000 0000 0000 0000 0000 0000 0101
无符号右移两位: 0000 0000 0000 0000 0000 0000 0000 0001

你可能感兴趣的:(计算机基础,java,服务器,linux)