二进制补码怎么算(23-11二进制补码怎么算)

上一期我们讲了十进制数及其换算。本期我们学习了计算机的原码、逆码和补码。这一期,重点是补。来自网络来自网络引入这三个代码的原因是什么?为了解决计算机减法的问题,

上一期我们讲了十进制数及其换算。本期我们学习了计算机的原码、逆码和补码。这一期,重点是补。

计算机组成原理(原码、反码、补码)

来自网络来自网络

引入这三个代码的原因是什么?

为了解决计算机减法的问题,由于CPU运算器中只有一个加法器,所以减法必须转换成加法。

那么你可能会问,为什么不加个减法器呢?

其实除了节约成本之外,比如1-1=1+(-1)=0的机器只能做加法不能做减法,这样电脑运算的设计就更简单了。

为什么要用补码来存储?

计算机组成原理(原码、反码、补码)

介绍机号,真值,原码,逆码的背景。

1.机器数量

一个数在计算机中的二进制表示称为这个数的机号。数字是有符号的。一个数的最高位用来在计算机中存储符号。正数为0,负数为1。

比如十进制的数+3,计算机字长是8位,换算成二进制就是0000 0011。如果是-3,就是1111 1101。然后,000000011和1111 1101这里是机器的数量。这台机器包含符号和数字部分。

2.真值

因为第一位是符号位,所以机器号的形式值不等于真实值。

比如上面的有符号数1111 1101,它的最高位1代表负,它的实值是-3而不是形式值253(1111 1101由无符号整数转换成等价于253的十进制)。

因此,为了区别起见,有符号位的机器数对应的真值称为机器数的真值。

例:真值0000 0001 = +000 0001 = +1,真值1000 0001 =–0111 1111 =–127;比如-3的二进制码是1000011,这是我们电脑里-3的原码。下面介绍原代码。

在计算机中,有符号数有三种表示法:原码、反码和补码。

最高位表示数字的符号,其他位表示数值。

无符号数:值:255(最小值0)到(最大值255)(正值0)

有符号数:值:127(最小-128)到(最大127)(负1)

3.原始代码

概念:正数的原码等于自身。顾名思义,原码就是原数。

例如:[+7]original = 0000111 b[-7]original = 10000111 b

[+表示0 7-0表示符号位为正——计算机字长为8位,所以中间填充8位0000-7二进制表示111-b表示这个数是二进制数]

8位二进制可以表示[11111110111111],即[-127,127]

4.反向代码

概念:正数的倒数等于自身。

例如:

[+7]原始00000111B

[+7]逆=00000111B

概念:负数的逆是其原码的符号位不变,其余位逐位反转。

原始代码:[-7] Original =10000111B

逆代码:[-7]逆=11111000B

5.补充

概念:正数的补数等于自身。

尽管C标准没有规定某种有符号数的表示,但几乎所有的机器都使用二进制补码。

[+7]原始= 0000111b [+7]补充= 0000111b

概念:负数的补码是其原码的符号位不变,其余位逐位反转,最低位加1。

例如:

原始代码:[-7] Original =10000111B

补码:[-7]补码=11111001B

二进制的补码是什么?

补数记法的概念:正数的补数和负数的补数一致,负数的符号位是1,既是符号位也是数值位,然后加1。

计算机组成原理(原码、反码、补码)

图片来源于网络图片来自网络。

模数的概念:计量单位称为模数或模数。

理解补码“模”的概念,有助于理解三码转换的数学原理。

例如,时钟以十进制计数,即以12为模。

在时钟上,通过增加(正向拨号)12的整数位或减去(反向拨号)12的整数位,时针的位置保持不变。14点,模块12落下后,就变成了(下午)2点(14=14-12=2)。从0点逆时针拨10格,即负10小时,或从0点顺时针拨2格(加2小时),即2点(0-10=-10=-10+12=2)。所以在模12的前提下,-10可以映射到+2。因此,对于模数为12的循环系统,加2和减10的效果是相同的;所以在一个模12的系统中,所有减10的运算都可以用加2来代替,这就把减法问题变成了加法问题(注:计算机的硬件结构中只有加法器,所以大部分运算最后都要转换成加法)。对于模12,0和2是互补的。同样,计算机的运算部件和寄存器都有一定的字长限制(假设字长为16),所以它的运算也是模运算。当计数器计数到16位,即65536个数时,就会溢出,从头开始计数。溢出量是计数器的模数。很明显,16位二进制数的模数是2 ^ 16 = 65536。在计算中,两个互补的数叫做“补数”。例如,一个有符号的8位数字可以表示256条数据,最大数是0 111 111 (+127),最小数是1 000 000 000(-128);那么第255个数据,加2减254也是一样的效果。结果是第一个数据,所以2和254具有相同的效果。对于255,2和254是补数。

计算机组成原理(原码、反码、补码)

图片来源于网络图片来自网络。

负数在计算机中如何表示?

比如+8在计算机中表示为二进制1000,那么-8是怎么表示的呢?

很容易认为一个位可以指定为符号位。等于0时表示正数,等于1时表示负数。例如,在8位机器中,每个字节的最高位被指定为符号位。那么,+8就是00001000,-8就是10001000。

但是,随便找一本计算机原理的书就会告诉你,其实计算机是用二的补码来表示负数的。

求正数对应的补数是一种数值转换方法,要分两步完成:

第一步

每个二进制位取相反的值,即得到相反的码;0变成1,1变成0。例如,00001000的倒数是1110111。

第二步

将上一步获得的逆代码加1。1110111变成了1111000。所以,00001000的二进制补码是1111000。也就是说,-8在计算机(8位计算机)中用11111000表示。

不知道大家怎么看,我觉得很奇怪。为什么一定要用这么麻烦的方式表达负数?更直观的方式不好吗?

计算机组成原理(原码、反码、补码)

图片来源于网络图片来自网络。

二进制补码的优势

其实计算机用什么方式表示负数并不重要。只要能保持一一对应,负数可以用任何方式表示。所以,既然可以随意选择,就要选择舒适、直观、方便的方式。

二进制补码是最方便的方法。它的方便之处在于所有的加法运算都可以用同一个电路来完成。

以-8为例。假设有两种表示。

一种是直观表象,即10001000;另一种是二进制补码表示法,即11111000。另外哪种表示更方便?写任意一个公式,16+(-8) =?6的二进制表示是00010000,所以用直观表示,加法会写成:

00010000

+10001000原始代码格式-8

-

10011000

可以看到,如果按照正常的加法规则,会得到10011000的结果,换算成十进制就是-24。显然,这是错误的答案。也就是说,在这种情况下,正常的加法规则不适用于正数和负数的加法,所以必须制定两套运算规则,一套是正数加正数,一套是正数加负数。从电路角度来说,做加法需要做两种电路。所以不能用原码来表示负数。

现在,让我们看看二进制补码符号。

00010000

+1111000补码形式-8

-

100001000

可以看到,按照正常的加法规则,结果是100001000。注意,这是一个9位二进制数。我们已经假设这是一台8位机,所以最高的第9位是溢出位,会自动丢弃。所以结果变成00001000,十进制转换正好是8,是16+(-8)的正确答案。这说明二进制补码表示法可以将加法规则推广到整个整数集,从而可以用一组电路实现所有整数的加法。

二进制补码的本质是用来表示负整数的。

在回答二进制补码为什么能正确实现加法之前,我们先来看看它的本质,也就是二进制补码步骤的转换方法是怎么来的。下面介绍如何在计算机中求一个正数及其对应的负数的表达式。比如128,正数是10,000,000,但令人惊讶的是,-128也是10,000,000。但由于数据类型的限制,第八位也有不同的含义。第一个1是数字位,最后一个1是符号位。

要把一个正数变成对应的负数,其实只要把这个数从0减去就可以了。比如-8其实就是0-8。用模数的概念解释下图。

计算机组成原理(原码、反码、补码)

图片来源于网络图片来自网络。

8的已知二进制数是00001000,而-8可由下式求出:

00000000

-00001000

- - - -

因为00000000(被减数)小于0000100(被减数),所以不足以减少。请回忆一下小学的算术。如果被减数的一位小于被减数,我们该怎么办?很简单。就问最后一个人借1。

所以0000000也是借了上一个的1,也就是说被减数其实是10000000,这是重点;该公式重写为:

100000000

-00001000

- - -

11111000

进一步观察发现可以拆分成10000000 = 1111111+1,所以上面的公式可以拆分成两个:

11111111

-00001000

-

1110111倒置

+00000001加1

-

11111000

二进制补码的两个转换步骤就是这样来的。

举个例子,比如-128的补数的由来,先用二进制表示正整数128,用1000000求-128的补数。

1 1 1 1 1 1 1 1

-1 0 0 0 0 0 0 0

-

0 1 1 1 1 1 1 1

+0 0 0 0 0 0 0 1

-

1 0 0 0 0 0 0 0

也就是-128的补码是1000000。8位结构能表示的最小数是-128;

计算机组成原理(原码、反码、补码)

图片来源于网络图片来自网络。

部分内容来自:https://blog.csdn.net/jq_ak47/article/details/45338061

二进制加减乘除原理:https://blog.csdn.net/lyt _ angularjs/article/details/80613228

这一期的内容结束了。如果喜欢,请评论,转发收藏,关注!

作者:天时地利人和

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/54301.html

发表回复

登录后才能评论