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

猜你喜欢

转载自www.cnblogs.com/cici-new/p/10493639.html