二进制负数为何是正数的取反加1?

直接取负数为什么不行?干嘛偏偏要加1呢?
一个正数的 二进制负数 是取反后 +1,
我想知道为什么要加1???
直接取反为什么不行呢???
当初搞计算机的那帮哥们为什么这样定义呢?

取反加一,就是正数的补数
理解也是非常的好理解,假如字节数-5,那么寄存器里面就是以5的补数表达的,以二进制的形式存储于寄存器为11111011,假如给它加5,那么正数5的二进制存储是00000101,+5和-5相加可以看出结果就是00000000,那么就可以这么的理解11111011代表-5,因为它加5等于0,用人的理解就是比0还要小5,对机器来说用补码表达负数运算非常方便
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-12-31
可以使符号位能与有效值部分一起参加运算,从而简化运算规则。
为了使减法运算变成加法运算,并进一步简化计算机中运算单元的电路设计,所有这些转换都是在计算机的底层进行的,而我们使用的汇编语言、C语言和其他高级语言都使用原始代码。得到补码,使负数成为可加的正数。因此,负数的补码=模块负数的绝对值。
计算机只能识别0和1,并且使用二进制,而人们在日常生活中使用十进制。”正如亚里士多德早些时候指出的那样,现在广泛使用十进制只是因为我们大多数人的生活中都有10个手指。虽然历史上手指计数(5,10碱基)的做法比二元或三元计数要晚。”
为了能方便地与二进制转换,就使用了十六进制(24)和八进制1.数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了。本回答被网友采纳
第2个回答  推荐于2017-10-01
两个正数相加,就是他们补码的和。两个正数相减,由于减数转换成了补码,还是只要补码相加就行。
这样在硬件设计的时候,只用加法器就可以实现了,简化设计。
补码是在计算机内存中的存放的形式,第一个数字表示符号位,0正1负。
整数补码是其本身,负数补码是其绝对值的补码除了符号位以外的二进制数取反加1本回答被网友采纳
第3个回答  2019-09-20
先理解以下内容:N个字节,总和为2^N-1,一个大小为n的正数(或者看成无符号数),取反等于总和减去本身。这里是取反操作最为直观得现象,因为取反前后得两个数相加每位都是1。
现在:(1)n取反得:2^N-1-n,(2)再加一得:2^N-n。 (3)再加上本身n,就等于2^N,这在N位溢出,N位全是0。
所以,(1)(2)步得结果就相当于n的相反数。如果没有第二步的加一,仅仅(1)(3)步,不会有溢出。
第4个回答  2022-06-25

原码取反加一,这只是一个方法,并不是补码的定义。

补码的来源,并不是什么原码反码符号位以及取反加一。

学习取反加一,确实是【不能理解补码的意义】。

补码,其实,是一个“代替负数运算的”的正数。

借助于补码,减法,就可以用加法代替。

使用补码,就能统一加减法,从而,就能简化计算机硬件。

--------------------------

为什么正数(补码)能够代替负数呢?

用十进制来说明,比较容易理解。

如果限定【仅用 2 位 10 进制数】,就可以有:

  24 - 1 = 23

  24 + 99 = (一百) 23

要求保留 2 位数,进位,就必须忍痛舍弃了。

此时,就会发现:+99 就和-1,是等效的。

+99,就称为-1 的补数。

+98,是-2 的补数。

。。。

如果,使用 3 位 10 进制数,-1 的补数,就是+999 了。

求补数的公式,大家都会推导:

  补数 = 负数 + 10^n, n 是位数。

式中的 10^n,是 n 位 10 进制数的计数周期。

--------------------------

计算机使用 2 进制,补数,就改称为:补码。

在计算机中,CPU 的每次计算,其位数,也是固定的。

八位机,就是八位,16 位机就是 16 位。

一个字节,是 8 位 2 进制。共有 2^8 = 256 组代码。

其范围是:0000 0000~1111 1111 (十进制 255)。

此时,-1 的补码,就是 255 (1111 1111)。

同理,-2 的补码是 254 (1111 1110)。

。。。

求补码的公式,仍然和十进制雷同:

  补码 = 负数 + 2^n, n 是位数。

式中的 2^n,是 n 位 2 进制数的计数周期。

只有负数,才需要用补码替换。

而正数,必须直接进行计算,不许变换。

所以,正数,就不必讨论补码的问题。

在 256 组二进制中,用 128 组来代替负数:-1~-128。

-1 的补码是:-1 + 2^8 = 255 = 1111 1111。

 。。。 

-128 的补码是:-128 + 2^8 = 128 = 1000 0000。 

以上,就是【补码的来源,以及存在的意义】

不详之处,大家自己再补充吧。

--------------------------

由求补码的公式:补码 = 负数 + 2^n。

就可以推出“绝对值取反加一”的简便方法。

注意:

只能推出“绝对值取反加一”,也即“正数取反加一”

但是,并不是“原码取反加一,符号位不变”。

那么,“原码取反加一,符号位不变”是怎么来的? 不知道!

原码反码符号位,都没有理论基础,凭空说白话而已,完全属于无稽之谈。

这两种代码,都是不合理的:一个零,却都指定了两个代码。

这就是无法使用的。所以,计算机根本就不存在这两种代码。

而且,-128 有八位的补码,却没有原码和反码。

那么,用“原码取反加一 ... ”,怎么可能求出补码!

本回答被网友采纳
相似回答