原码和补码
原码
我们知道,在计算机里只有高电压和低电压的差别,也就是计算机只有0 或者 1。计算机的计算只支持二进制,那么十进制的计算在计算机里是如何进行的呢?
首先,如果要计算十进制的数据,我们首先要把它切换成二进制数据。
就比如 十进制数 2在二进制中表示为:
0000 0010
但显而易见 负数是没办法用这种方法表示的。
于是,我们就需要一个特殊的位来表示正负,第一个占位理所应当就成了表示正负的占位。1表示负数 0表示正数
-2 用二进制表示为:
1000 0010
这就是原码,一种可以表示正负的二进制数。
上面的原码仍存在一个问题,当进行二进制加法的时候。在某些极端情况,不可避免地会出现运算错误。
例如:2 +(-2)
0000 0010
+ 1000 0010
-------------
1000 0100
结果为 -4 显然不成立
于是,原码变出现了差错。
此时,就需要补码!
补码
上述问题,我们可以换一种思维来解决这个问题。
我们还拿 2和(-2)举例子。
0000 0010
+ xxxx xxxx
------------
0000 0000
我们可以以此反过来求 这一堆x 是多少 这一堆 x 代表的就是-2 的二进制补码
易得 那一堆 x为:
1111 1110
反过来,我们也可以通过补码来通过这个补码来判断它的正负 。
例如1111 1110
的第一个位数为1 ,该二进制数就为负数。但我们没办法通过补码来得知这堆补码所代表的是哪个数 。
所以,就需要我们把他转换为 原码的绝对值。
计算方法为:减0000 0001再取反
实际计算:
1111 1110
-0000 0001
-----------
1111 1101
取反
0000 0010
这个数的绝对值是 2 ,又因为我们通过它的补码知道它是负数,所以为-2。
总结:
1.负数表示需要补码,算出补码的方式如下:
该数绝对值的原码
取反
加0000 0001
补码算回的方法跟上上面说的公式相反,和上面的例子一致。
2.正数和0的补码和原码一致。