八位二进制补码最小值
8位二进制补码表示整数的最小值是 -128, 最大值是 +127.
原因:正数的补码就是其本身,8位二进制最大正整数是 0111111,也就是十进制值127。
负数的补码是它原数的反码加1,最小值,就是负得最多的数,
即二进制 1000 0000。十进制-128。
推导: -128 =-1+-127 = 原码 1000 0001+原码 1111 1111 =
补码 1111 1111 + 补码 1000 0001 = 补码 1000 0000。
什么是二进制的补码?
注明:正数的补码与负数的补码一致,负数的补码符号位为1,这位1即是符号位也
是数值位,然后加1
补码借鉴的模概念,虽然理解起来有点晦涩难懂。可以跳过
模的概念:把一个计量单位称之为模或模数。例如,时钟是以12进制进行计数循环的,即以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
来代替,这就把减法问题转化成加法问题了注:计算机的硬件结构中只有加法器,所以大
部分的运算都必须最终转换为加法。10和2对模12而言互为补数。同理,计算机的运算
部件与寄存器都有一定字长的限制假设字长为16,因此它的运算也是一种模运算。当计数器计满16位也就是65536个数后会产生溢出,又从头开始计数。产生溢出的量就是计数
器的模,显然,16位二进制数,它的模数为2^16=65536。在计算中,两个互补的数称为“补码”。比如一个有符号8位的数可以表示256个数据,最大数是0
1 1 1 1 1 1 1+127,最小数1 0 0 0 0 0 0 0 -128;那么第255个数据,加2和减254都是一样的效果得出的结果是第一个数据,所以2和254是一样的效果。对于255来说2和254是互补的数。
求一个正数对应补码是一种数值的转换方法,要分二步完成:
第一步,每一个二进制位都取相反值,即取得反码;0变成1,1变成0。比如,00001000的反码就是11110111。
第二步,将上一步得到的反码加1。11110111就变成11111000。所以,00001000的二进制补码就是11111000。也就是说,-8在计算机8位机中就是用11111000表示。
不知道你怎么看,反正我觉得很奇怪,为什么要采用这么麻烦的方式表示负数,更直觉的方式难道不好吗?
二进制补码的好处
首先,要明确一点。计算机内部用什么方式表示负数,其实是无所谓的。只要能够保持一一对应的关系,就可以用任意方式表示负数。所以,既然可以任意选择,那么理应选择一种用的爽直观方便的方式。
补码的最小负数二进制的补码就是最方便的方式。它的便利体现在,所有的加法运算可以使用同一种电路完成。
还是以-8作为例子。假定有两种表示方法。一种是直觉表示法,即10001000;另一种是2的补码表示法,即11111000。请问哪一种表示法在加法运算中更方便?随便写一个计算式,16 + -8 = ?16的二进制表示是 00010000,所以用直觉表示法,加法就要写成:
00010000
+10001000原码形式-8
---------
10011000
可以看到,如果按照正常的加法规则,就会得到10011000的结果,转成十进制就是-24。显然,这是错误的答案。也就是说,在这种情况下,正常的加法规则不适用于正数与负数的加法,因此必须制定两套运算规则,一套用于正数加正数,还有一套用于正数加负数。从电路上说,就是必须为加法运算做两种电路。所以用原码表示负数是不行的。
现在,再来看二进制的补码表示法。
00010000
+11111000补码形式-8
---------
100001000
可以看到,按照正常的加法规则,得到的结果是100001000。注意,这是一个9位的
二进制数。我们已经假定这是一台8位机,因此最高的第9位是一个溢出位,会被自动舍去。所以,结果就变成了00001000,转成十进制正好是8,也就是16 + -8 的正确答案。这说明了,2的补码表示法可以将加法运算规则,扩展到整个整数集,从而用一套电路就可以实现全部整数的加法。特别说明,有部分素材来自博主JQ_AK47
感谢您的阅读,祝您生活愉快。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论