
4 位移运算
发布时间:
位移运算
-
左移运算符(<< )
将操作数转换为二进制形式进行运算,整体二进制位向左移动,右边补0,当改变符号位时,数变化较大,位移后,负数按补码形式取值。
注意: int 类型的数据进行左移的时候,当左移的位数大于等于32位的时候,位数会先求余数,然后再进行左移。 -
右移运算符(>> )
带符号右移动
正数右移:与无符右移一样,整体右移左边补0。
负数右移:求补码-->右移左边全补1--> 符号位不变取反加1-->以源码形式转10进制。
例:右移运算符运算 -100>>4
10000000 00000000 00000000 01100100 原码
11111111 11111111 11111111 10011100 补码 (符号位不变,余位取反加1 )
11111111 11111111 11111111 11111001 右移4位,在高位补1
10000000 00000000 00000000 00000110 保留符号位,然后按位取反
10000000 00000000 00000000 00000111 然后加1,即为所求的原码
结果为:-7
- 无符号右移运算符(>>> )
无符号右移运算符和右移运算符是一样的,不过无符号右移运算符在右移的时候是补0的,而右移运算符是补符号位的
例:100 无符号右移 4位
00000000 00000000 00000000 01100100 //100 源码补码均为:
00000000 00000000 00000000 00000110 //右移四位:
结果为:6
例:-100无符号右移4位
10000000 00000000 00000000 01100100 //-100原码:
11111111 11111111 11111111 10011100 //-100补码: 保证符号位不变,其余位置取反并加1
00001111 11111111 11111111 11111001 // 无符号右移4位:在高位补0
结果为:268435449