带符号右移 >> 带符号左移<< 无符号右移>>> 没有无符号左移
在计算机中,不用+-来表示正负数,用最高位是0还是1来表示正负数,0表示正,1表示负
高位在左,低位在右,左移是乘,右移是除
1.带符号右移
>> 简算:[5/(2^2)=1]
正数例如 5>>2(正数高位补0)
首先写出5的二进制--->0000 0000 0000 0000 0000 0000 0000 0101
因为是正数,所以最高位为0,右移两位就是从最高位开始补2个0(左边加两个0)
即--->0000 0000 0000 0000 0000 0000 0000 0001,化为十进制结果为1[将右边红色的01去掉,在右边补两个0]
负数例如-5>>2(负数高位补1)
首先写出-5的二进制,因为是负数所以高位为1
1000 0000 0000 0000 0000 0000 0000 0101(原码)
然后写出-5的补码:保证符号为不变,其余位置去翻加一(从右往左开始,遇到第一个1之后的所有数取反)
1111 1111 1111 1111 1111 1111 1111 1011 (补码)
右移2位: 在高位补1
1111 1111 1111 1111 1111 1111 1111 1011(补码移位后的结果)[去掉右边两个1,在高位补两个1]
根据补码写出原码才是我们所求的结果,保留符号位,然后按位取反再加一即为所求数的原码
1000 0000 0000 0000 0000 0000 0000 0100(按位取反后的结果)
1000 0000 0000 0000 0000 0000 0000 0101(再加一)
结果为:5
2.带符号左移(正数低位补0,负数低位补1)
<< 简算:[5*(2^2) = 20]
正数例如5<<2(正数低位补0)
首先写出5的二进制--->0000 0000 0000 0000 0000 0000 0000 0101
因为是正数,所以最高位为0,左移两位就是从最低位开始补2个0(右边加两个0)
即--->0000 0000 0000 0000 0000 0000 0001 0100,化为十进制结果为20[将左边红色的00去掉,在左边补两个0]
负数例如-5>>2(负数低位补1)
首先写出-5的二进制,因为是负数所以高位为1
1000 0000 0000 0000 0000 0000 0000 0101(原码)
然后写出-5的补码:保证符号为不变,其余位置去翻加一(从右往左开始,遇到第一个1之后的所有数取反)
1111 1111 1111 1111 1111 1111 1111 1011 (补码)
左移2位: 在低位补1
1111 1111 1111 1111 1111 1111 1110 1111(补码移位后的结果)
根据补码写出原码才是我们所求的结果,保留符号位,然后按位取反再加一
1000 0000 0000 0000 0000 0000 0001 0000(取反后的结果)
1000 0000 0000 0000 0000 0000 0001 0001(再加一)
结果为:-17
3.无符号右移(不论正负高位均补0)
正数例如5>>>2
与5>>2一样,结果也为1
负数例如-5>>>2
首先写出-5的二进制,因为是负数所以高位为1
1000 0000 0000 0000 0000 0000 0000 0101(原码)
然后写出-5的补码:保证符号为不变,其余位置去翻加一(从右往左开始,遇到第一个1之后的所有数取反)
1111 1111 1111 1111 1111 1111 1111 1011 (补码)
右移2位: 在高位补0
0011 1111 1111 1111 1111 1111 1111 1011(补码移位后的结果)[去掉右边两个1,在高位补两个0]
结果为:将0011 1111 1111 1111 1111 1111 1111 1011化为二进制
总结:
- 5>>2 相当于5除以两次2(或者5除以2^2),结果就为1[5>>n--->5>>2^n相当于除以2^n]
- 5>>>2 相当于5除以两次2(或者5除以2^2),结果就为1[5>>>n--->5>>>2^n相当于除以2^n]
- 5<<2 相当于5乘以两次2(或者乘以2^2),结果为20[5<<n--->5<<2^n相当于乘以2^n]