负数的位移(右移)

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

以上是关于负数的位移(右移)的主要内容,如果未能解决你的问题,请参考以下文章

java 位移运算符

JS运算符

Java 位运算

Java中的左移右移详细分析

Java负整数的左移右移无符号右移

python怎么集体右移