计算机二进制运算

正数原码、反码、补码相同

负数的原码是先根据正数的二进制确定,最高位补 1

负数的反码是在原码的基础上保持符号位不变,其它进制位取反操作

负数的补码是在负数的反码基础上加 1

在计算机当中因为硬件的关系是没有减法操作的,只有加法操作

下面就举例说明 5 - 7 的运算过程

5 - 7 可以等价于 5 + (-7)

5 是正数,其原码、反码、补码均是 0000 0101

-7 的原码计算过程,根据正数 7 得出二进制表示方式为 0111,把剩下的位置补成 8 位,最高位是 1,所以 -7 的原码为 1000 0111

-7 的反码是在 -7 的原码为基础上,符号位不变,其它进制位取反操作,所以 -7 的反码为 1111 1000

-7 的补码是在 -7 反码的基础上加 1,所以 -7 的补码是 1111 1001

计算机底层进行运算是通过补码来进行的,5 + (-7) 的二进制形式补码相加如下

0000 0101

1111 1001

---------

1111 1110

我们得到的 1111 1110 是补码,最高位是 1,所以它是个负数,将补码形式的 1111 1110 要反推成原码

补码形式的 1111 1110 的反码是补码减 1,所以其反码是 1111 1101

反码形式的 1111 1101 的原码是保持符号位不变,其它进制位取反,所以其原码是 1000 0010

1000 0010 由于最高位是 1,所以它是个负数, 0010 转成二进制是 2,所以 5 + (-7) 的最终计算结果是 -2

 

1、按位与(&): 如果都是 1 ,则为 1
2、按位或(|): 如果都是 0 ,则为 0
3、按位异或(^): 如果相同则为 0 ,如果不同则为 1
4、左移(<<n): 操作数乘以 2 的 n 次方
5、右移(>>n): 操作数除以 2 的 n 次方
6、无符号右移动=(>>>n): 操作数除以 2 的 n 次方,和右移的区别是,右移会用该操作数的符号位置的数字补全,而无符号右移是用 0 来补全

posted @ 2021-03-15 22:35  变体精灵  阅读(254)  评论(0编辑  收藏  举报