>> 带符号右移
- 正数高位补0,负数高位补1。
例 8>>1 结果为4;-8>>1 结果为-4;
tip >>右边的数指定移动的位数
详细解释:
int x1=8;
int x2=-8;
————————————————————————————————
8的二进制:0000 0000 0000 0000 0000 0000 0000 1000
右移两位高位补0:0000 0000 0000 0000 0000 0000 0000 0100 即4
————————————————————————————————
————————————————————————————————
-8的二进制:1111 1111 1111 1111 1111 1111 1111 1000
右移两位高位补1:1111 1111 1111 1111 1111 1111 1111 1100 即-4
————————————————————————————————
>>> 不带符号右移
- 无论正数还是负数,高位统统补0。
例 8>>>1 结果为4;
-16>>>1 结果为1073741820;
详细解释:
int y1=8;
int y2=-16;
————————————————————————————————
8的二进制:0000 0000 0000 0000 0000 0000 0000 1000
右移两位高位补0:0000 0000 0000 0000 0000 0000 0000 0100 即4
————————————————————————————————
————————————————————————————————
-16的二进制:1111 1111 1111 1111 1111 1111 1111 0000
右移两位高位补0:0011 1111 1111 1111 1111 1111 1111 1100 即1073741820
————————————————————————————————
tip:
如果要判断两个数符号是否相同时,可以用>>:
return ((a >> 31) ^ (b >> 31)) ==0;