负数的位移(右移)
Posted 小写丶H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了负数的位移(右移)相关的知识,希望对你有一定的参考价值。
这里只是针对 右移。
(左移对负数,正数 的影响不大,都只需要右边补0即可。)
首先 我们看到的数,都是以二进制的形式在计算机下操作的。并且位运算符的操作对象是补码。
正数: 原码=反码=补码
负数: 原码 ----> 反码 (取反) ---->补码 (+1)
如整型 int a =10;
0000 0000 0000 0000 0000 0000 0000 1010 (这个是原码)
因为是正数,所以可以直接操作进行位移。
以负数进行演示:
计算结果:
1000 0000 0000 0000 0000 0000 0000 1010 (这个是原码)
这时就要计算出补码了,取反 ,+1。
1.取反(符号位不变)
1111 1111 1111 1111 1111 1111 1111 0101
2.+1
1111 1111 1111 1111 1111 1111 1111 0110
3.位移(右移2位)(正数补0,负数补1(左边))
1111 1111 1111 1111 1111 1111 1111 1101
补码这里这个是,所以要在算回去(原码)。
有两种形式:取反 ,+1。 或者 -1 ,取反。
4.取反
1000 0000 0000 0000 0000 0000 0000 0010
5.+1
1000 0000 0000 0000 0000 0000 0000 0011
这个二进制表示: -3
以上是关于负数的位移(右移)的主要内容,如果未能解决你的问题,请参考以下文章