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

  1. 计算补码的值
  • 确定正负号

  • 负数:补码 = 反码 + 1(即 “取反加 1”),本质是 模 - 绝对值(n 位模为2ⁿ)。

  1. 取反+1得到其绝对值
  2. -1取反直接得到他的原码
  3. 负数补码的绝对值 = 模 - 补码的十进制值(将补码视为无符号数时的大小)
  1. 好像是为了更好的计算负数,优化计算机的性能

  2. 反码,补码存在的意义

反码是把原码取反,因为人们想加上一个数,就相当于加上一个相反数,就像(-5)+ 5 = 0,而(5)0101 +(-5的反码) 1010 = 1111(-0的反码)正好少个1

5 - 3 = 0101 +(-3的反码)1100 = 10001

就是引入反码来当做负数,但是会出现问题 反码 = 2^n-1 -绝对值

(5)0101+(-5的补码) 1011=10000(0的补码)

为了用加法统一实现加减法,简化电路设计,为了解决,计算机做减法和引入符号位(正号和负号)的问题

那做减法和引入符号位会出现什么问题呢?

首先我们使用带符号位的原码来计算,最高位表示符号位,1表示正数,0表示负数,那我们有了这些数字,我们用来干什么呢?最简单的肯定是用来简单的运算

好,现在我们开始计算!!!

正常的两个正数加法,两个负数加法肯定是没有问题,嗯,不错,easy

恩,不对,还少了什么?

那当我们开始正数与负数的计算时:

发现了一点不对劲

0001+1001=1010(1+(-1)=-2)

1对-1说,你背着我干了什么?你是不是跟隔壁的……好上了。

算了,回归正题!!怎么写着写着把时间全浪费了

这是为什么会出现这种情况呢?

你想一下十进制的正数减负数是怎么化成加法

比如 3 - 5:

变成3 + (-5)

然后把绝对值大的减去绝对值小的,变成2,最后加上绝对值大的符号。本质还是减法,做不到只按一种计算方式去统一计算方法

原码也是如此,减法无法直接转化为加法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值