Java中右移运算
-1>>2 = -1
-5>>2=2
-5>>>2=1073741822 展开
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
操作数每右移一位,相当于该数除以2。
注:正数的原码,反码,补码一致;负数的反码是除去符号位外其余取反,负数补码是除去符号位外其余取反,末尾加1。 (二进制最左边一位是符号位)
带符号右移运算符(>>)
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
无符号右移运算符(>>>)
>>>运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃
-1>>2 = -1
-1: 原码:1000 0001 反码:1111 1110 补码:1111 1111
右移2位:1111 1111 ( 用补码操作,并用 1 补齐左边位)
再找反码:1000 0000 ( 除去左边符号位,其余取反 )
再找原码:1000 0001 = -1 ( 还是将反码末尾加1 )
-5>>2=-2
-5: 原码:1000 0101 反码:1111 1010 补码:1111 1011
右移2位:1111 1110 ( 用补码操作,并用 1 补齐左边位)
再找反码:1000 0001 ( 除去左边符号位,其余取反 )
再找原码:1000 0010 = -2 ( 还是将反码末尾加1 )
-5>>>2=1073741822
-5:
原码:1111 1111 1111 1111 1111 1111 1111 0101
反码:1111 1111 1111 1111 1111 1111 1111 1010
补码:1111 1111 1111 1111 1111 1111 1111 1011
右移2位:0011 1111 1111 1111 1111 1111 1111 1110=1073741822