位操作符

来源:互联网 发布:springmvc json转对象 编辑:程序博客网 时间:2024/06/06 01:00

数值在计算机内是二进制存储的。正数以二进制格式存储,没有用到的位用0填充,负数以其绝对值二进制补码格式存储。
对于有符号的整数,32位中前31位表示整数的值,第32位表示符号,0表示整数,1表示负数,这个位叫符号位。有符号整数的第32位是不能访问的。


计算补码:计算这个数的绝对值二进制,取二进制反码,反码再加1。

例:求-18的二进制补码:
1)绝对值二进制
0000 0000 0000 0000 0000 0000 0001 0010
2)二进制反码
1111 1111 1111 1111 1111 1111 1110 1101
3)反码加1
1111 1111 1111 1111 1111 1111 1110 1110


1左移

左移用<<表示,左移操作时将数值的所有位向左移指定位数,右侧多出的空位用0补充,但左移不会影响操作数的符号位

如果2左移5位,结果是64;如果-2左移5位,结果是-64。

2右移

有符号右移

有符号右移用>>表示,将数值的所有位向右移指定位数,但保留符号位,左侧多出的空位由符号位的值来填充。

有符号右移与左移结果相反。64右移5位,结果是2;-64右移5位,结果是-2。

无符号右移

无符号右移用>>>表示,将数值的所有32位向右移。

正数无符号右移的结果和有符号右移相同,64无符号右移5位,结果仍是2。

负数无符号右移操作会把负数的二进制码当成正数的二进制码,负数是以其绝对值的二进制补码存储的无符号右移后结果会非常大

例:-64无符号右移

64的二进制存储

0000 0000 0000 0000 0000 0000 0100 0000

取反

1111 1111 1111 1111 1111 1111 1011 1111

加1后为-64二进制存储

1111 1111 1111 1111 1111 1111 1100 0000

-64>>>5 等于十进制的134217726

0000 0111 1111 1111 1111 1111 1111 1110




0 0
原创粉丝点击