移位运算:在数的二进制形式的基础行进行位移
<< | 左移运算 |
>> | 有符号右移 |
<<< | 无符号右移 |
目录
**此篇为个人理解,只用于个人学习,有错误的地方还请见谅**
1,左移运算
例:
26<<1(26的二进制向左移动1位)
26的二进制为:00011010
移动之后: 00110100
运算后(转成十进制):52
26 <<1 = 52
总结:
-26<<1(负数是以补码的形式存储)
-26的原码:10011010
所以-26的反码为:11100101
所以-26的补码为:11100110
移动之后:11001100
转换成反码:11001011
转成成原码为:10110100
运算后:-52
满足:
2、有符号右移(>>)
正数右移:左侧补0
26 >>1
26的二进制为:00011010
移动之后: 00001101
运算后(转成十进制):13
13 <<1
13的二进制为:00001101
移动之后:00000110
运算后:6
总结:
负数右移:左侧补1
注意:遇到有小数的时候,采取向下取整的方法(6.5取6,-6.5取-7)
3、无符号右移(会改变正负号)
正数、负数左侧都补0
前面左移动和有符号运算不会考虑到决定正负的一位,所以直接来算-26的无符号右移,计算机默认是32位运算,这里-26的原码10011010,符号位会影响结果故:
-26的原码可写成:00000000 00000000 00000000 10011010
反码为:11111111 11111111 11111111 11100101
补码为:11111111 11111111 11111111 11100110
右移动后:01111111 11111111 11111111 11110011
转为原码:10000000 00000000 00000000 00001101
-26 >>> 1= 2147483635