为什么计算机中负数用补码表示

可以直接从第三部分(计算机中数的存储和运算)开始看。

0x00 机器数和真值

首先了解机器数真值的概念.

  • 机器数:一个数在计算机中的二进制表示,计算机中机器数的最高位是符号位,正数符号位为0,负数符号位为1。机器数包含原码、反码和补码三种表示形式。
比如,十进制中的数 +3 ,计算机字长为8位
转换成二进制就是0000 0011。
如果是-3,就是 1000 0011。

这里的 0000 0011 和 1000 0011 都是机器数。
  • 真值:一个机器数本身表示的值就是真值。
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1

0x01 原码、反码和补码

  • 原码:原码表示法在数值前面增加了一位符号位(即最高位为符号位),正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。
  • 反码:正数的反码是其本身,负数的反码是在原码基础上符号位不变,其余位取反。
  • 补码:正数和0的补码就是该数本身。负数的补码则是将其对应正数按位取反再加1(反码+1)。

0x02 计算机中数的存储和运算

  • 补码系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。只要一种加法电路就可以处理各种有号数加法,而且减法可以用一个数加上另一个数的补码来表示,因此只要有加法电路及补码电路即可完成各种有号数加法及减法,在电路设计上相当方便。
  • 另外,补码系统的0就只有一个表示方式,这和反码系统不同(在反码系统中,0有二种表示方式),因此在判断数字是否为0时,只要比较一次即可。
  • 计算机中的负数是用补码的形式存储和运算的。
  • 计算机中只有加法,没有减法。

1、为什么没有减法?
人类的减法运算涉及到符号位的处理,这对电路来说,是比较复杂的。

2、那么计算机中减法是怎么实现的呢?
补码系统下,可以通过把减法换成反码,然后通过加法器运算。

0x03 实例运算

实例一:

127 - 1实例

# 127 - 1
127原码:0111 1111
127反码:0111 1111
127补码:0111 1111
# 结论:正数原码、反码和补码是一样的。

-1原码:1000 0001
-1反码:1111 1110
-1补码:1111 1111
# 结论:负数反码符号位不变,其余位取反,补码在反码基础上加一。

#运算,最高位进位直接丢弃
	0 1 1 1   1 1 1 1
+   1 1 1 1   1 1 1 1
-----------------------
    0 1 1 1   1 1 1 0
    
# 126原码、补码、反码:0111 1110
# correct!

实例二:

1 - 127实例

# 127 - 1可以换成1 + (-127)
1原码:0000 0001
1反码:0000 0001
1补码:0000 0001
# 结论:正数原码、反码和补码是一样的。

-127原码:1111 1111
-127反码:1000 0000
-127补码:1000 0001
# 结论:负数反码符号位不变,其余位取反,补码在反码基础上加一。

#运算,最高位进位直接丢弃
	0 0 0 0   0 0 0 1
+   1 0 0 0   0 0 0 1
-----------------------
    1 0 0 0   0 0 1 0
    
# 1000 0010是一个补码
# 其反码是1000 0010 - 1 = 1000 0001
# 其原码是1111 1110 = -126
# correct!

附:部分8-bit补码系统的整数

01111111=127
00000010=2
00000001=1
00000000=0
11111111=−1
11111110=−2
10000001=−127
10000000=−128
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值