java位移运算符2 转
https://blog.csdn.net/xxx134617/article/details/7454774
java中int类型占4个字节,二进制用补码表示:
3的二进制表示: 00000000 00000000 00000000 00000011
-3的二进制表示:11111111 11111111 11111111 11111101
1.左移<<:左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0).
如:
3<<1=00000000 00000000 00000000 00000110=6;
-3<<1=11111111 11111111 11111111 11111010=-6;
2.有符号右移>>:“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用 了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。
3>>1=00000000 00000000 00000000 00000001=1;
-3>>1=11111111 11111111 11111111 11111110=-2;
3.无符号右移:
3>>>1=00000000 00000000 00000000 00000001=1;
-3>>>1=01111111 11111111 11111111 11111110=2147483646;
---------------------
计算过程:
-3的源码:
10000000 00000000 00000000 00000011
反码:除符号位取反
11111111 11111111 11111111 11111100
补码:除符号位+1
11111111 11111111 11111111 11111101
-3<<1
计算机中的二进制表示(-3的二进制补码)
11111111 11111111 11111111 11111010
转十进制数
1)除去符号位减1
11111111 11111111 11111111 11111001
2)除去符号位,按位取反;结果就是负数的源码;
10000000 00000000 00000000 00000110
- 6