Java,C 位移运算符 有符号右移>>与无符号右移>>>
个人博客 地址:https://www.wenhaofan.com/a/20181029232749
有符号右移
正数有符号右移
首先计算4>>2
将4转为二进制
0000 0100
右移两位,符号位为0,所以高位置0得
0000 0001
转二进制得 1
所以 4>>2 =1
负数有符号右移
再来计算-4>>2
首先我们需要取得-4的补码 补码为反码+1
反码为正码按位取反
由正码0000 0100 取反得
1111 1011
再+1得
1111 1100
右移两位,符号位为1,所以高位置1得
1111 1111
此时减一得补码
1111 1110
补码转正码得
0000 0001
十进制为1,加负号得
-1
无符号右移
正数无符号右移
6>>>2
正数无符号右移
取6的二进制
0000 0000 0000 0000 0000 0000 0000 0110
右移2位,最高位置0
0000 0000 0000 0000 0000 0000 0000 0001
转为10进制得
1
负数无符号右移
-6 >>>2
先得6的二进制
0000 0000 0000 0000 0000 0000 0000 0110
按位取反,得反码
1111 1111 1111 1111 1111 1111 1111 1001
反码+1得补码
1111 1111 1111 1111 1111 1111 1111 1010
右移,高位置0得
0011 1111 1111 1111 1111 1111 1111 1110
转10进制得
1073741822