⼋位⼆进制数能表⽰数的范围以及原码、反码和补码含义
⾸先⼋位⼆进制数0000 0000 ~1111 1111,⼀共可以表⽰2^8=256位数,如果表⽰⽆符号整数可以表⽰0~255。计算⽅法就是⼆进制与⼗进制之间的转换。
如果想要表⽰有符号整数,就要将最前⾯⼀个⼆进制位作为符号位,即0代表正数,1代表负数,后⾯7位为数值域,这就是原码定义。这样在现实⽣活中完全没有问题,但在计算机中就出现了问题。
数的表⽰:
在原码中,0的表⽰有两种(+0)0000 0000、(-0)1000 0000,这样就产⽣了编码映射的不唯⼀性,在计算机上就要区分辨别。然⽽+0、-0却没有什么现实意义。
数的运算:
为了解决上述数的表⽰问题,我们可以强制把转换后的10000000强制认定为-128。但这⼜出现了⼀个新的问题就是数的运算。数学
上,1+(-1)=0,⽽在⼆进制中00000001+10000001=10000010,换算成⼗进制为-2。显然出错了。所以原码的符号位不能直接参与运算,必须和其他位分开,这就增加了硬件的开销和复杂性。
这个时候就要引⼊补码,补码表⽰法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。反码定义为:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
但为什么要引⼊补码呢?
补码的最小负数以及负数补码定义为什么是相对应的正数原码取反加⼀?
先解决第⼀个问题,引⼊补码是为了解决计算机中数的表⽰和数的运算问题,使⽤补码,可以将符号位和数值域统⼀处理,即引⽤了模运算在数理上对符号位的⾃动处理,利⽤模的⾃动丢弃实现了符号位的⾃然处理,仅仅通过编码的改变就可以在不更改机器物理架构的基础上完成的预期的要求。
要解决第⼆个问题同时理解补码,⾸先要理解“模”。
模的概念可以帮助理解补数和补码。
“模”是指⼀个计量系统的计数范围。如时钟等。计算机也可以看成⼀个计量机器,它也有⼀个计量范围,即都存在⼀个“模”。例如:
(n)-1,模=2
时钟的计量范围是0~11,模=12。表⽰n位的计算机计量范围是0~2(n)。
“模”实质上是计量器产⽣“溢出”的量,它的值在计量器上表⽰不出来,计量器上只能表⽰出模的余数。任何有模的计量器,均可化减法为加法运算。
例如:假设当前时针指向10点,⽽准确时间是6点,调整时间可有以下两种拨法:⼀种是倒拨4⼩时,即:10-4=6;另⼀种是顺拨8⼩时:10+8=12+6=6
在以12模的系统中,加8和减4效果是⼀样的,因此凡是减4运算,都可以⽤加8来代替。对“模”⽽⾔,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。共同的特点是两者相加等于模。
对于计算机,其概念和⽅法完全⼀样。n位计算机,设n=8,不讨论符号位, 则所能表⽰的最⼤数是11111111,若再加1成为
100000000(9位),但因只有8位,最⾼位1⾃然丢失。⼜回了00000000,所以8位⼆进制系统的模为2^9。在这样的系统中减法问题也可以化成加法问题,只需把减数⽤相应的补数表⽰就可以了。把补数⽤到计算机对数的处理上,就是补码。
接下来就是取反加⼀的来源:
例如-8,可以看做0-8,即0000 0000 - 0000 1000,⼩减⼤,像⾼位借⼀,即1 0000 0000 - 0000 1000
= 1111 1000,这个可以看做⽤模数来减去该数,会得到该数的补数。同时上式也可以看做 (1111 1111 - 0000 1000)+1,即0000 1000 取反加1。
负数补码定义是相对应的正数原码取反加⼀,这个同负数的反码末尾加⼀是同样的效果。注意看反码的定义。取反加⼀是逐位取反,包括符号位。
对⼀个正数的原码取反加⼀,得到这个正数对应负数的补码。例如~6=-7,⽽且加⼀之后会多出⼀个⼋进制补码1000 0000,⽽这个补码就对应着原码1000 0000,数字位同时当做符号位即-128。
根据以上内容我们就可以来解释⼋位⼆进制数的表⽰范围
⼋位⼆进制正数的补码范围是0000 0000 ~ 0111 1111 即0 ~ 127,负数的补码范围是正数的原码0000 0000 ~ 0111 1111 取反加⼀(也可以理解为负数1000 0000 ~ 1111 1111化为反码末尾再加⼀)。
所以得到 1 0000 0000 ~ 1000 0001,1000 0001作为补码,其原码是1111 1111(-127),依次往前推,可得到-1的补码为1111 1111,那么补码0000 0000的原码是1000 0000符号位同时也可以看做数字位即表⽰-128,这也解释了为什么127(0111
1111)+1(0000 0001)=-128(1000 0000)。
总结
在计算机中数据⽤补码表⽰,利⽤补码统⼀了符号位与数值位的运算,同时解决了+0、-0问题,将空出来的⼆进制原码1000 0000表⽰为-128,这也符合⾃⾝逻辑意义的完整性。因此⼋位⼆进制数表⽰范围为-128~+127。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。