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