知道二进制位如何转化后,我们再来看移位操作符的移动规则。
1.左移操作符
左边舍弃,右边补0
1 2 |
|
a<<1的意思就是a的补码向左移动一位,正数的原反补相同,所以得补码为00000000 00000000 00000000 00000101 ,向左移动一位得00000000 00000000 00000000 00001010,换算一下就可得到10。
此时a的值还是5,可以类比b=a+1,a并不会发生变化。
1 2 |
|
先写出 -1的原码,再取反加一得补码,补码向左移动一位,然后将得到的补码按相同规则换算成原码,就可以得到 -2了。
10000000 00000000 00000000 00000001 - -1的原码
11111111 11111111 11111111 11111110 - -1的反码
11111111 11111111 11111111 11111111 - -1的补码11111111 11111111 11111111 11111110 - -1<<1的补码
11111111 11111111 11111111 11111101 - 反码
10000000 00000000 00000000 00000010 - 原码 = -2
2.右移操作符
右移规则分两种,一种是逻辑右移一种是算术右移。但绝大多数编译器都是采用算术右移。
算术右移:左边补原符号位,右边舍弃
逻辑右移:左边补0,右边舍弃