注:需要注意的是java中不支持<<<运算符。正常都是按计算器8位来算,且都是用补码来移位,移位之后在转为原码
1、<< 、>> >>:带符号右移。正数右移高位补0,负数右移高位补1。比如:5>>2 = 1:
5的原码、反码、补码:0000 0101
补码右移两位,高位补0: 0000 0001
转成原码:0000 0001
-5>>2 = -2:
-5的原码:1000 0101
反码:1111 1010
补码:1111 1011
补码右移两位,高位补1:1111 1110
转为反码:1111 1101
转为原码:1000 0010
<<:带符号左移。正数左移高位补0,负数右移高位补1。 2、>>>,注: 该运算符只针对int型和long型,byte ,short ,char型需要转换成Int型在进行操作。
>>>:无符号右移。无论是正数还是负数,高位通通补0。-2>>>1 = 2^31 - 1:
-2的原码:1000 0000 0000 0000 0000 0000 0000 0010
-2的反码:1111 1111 1111 1111 1111 1111 1111 1101
-2的补码:1111 1111 1111 1111 1111 1111 1111 1110
补码右移1位,高位补1: 0111 1111 1111 1111 1111 1111 1111 1111
此时已经变成正数,所以原码、反码、补码相同
等于 2^31 - 1



