整数在计算机中的表示
在计算机中,因为只有0和1两种形式,为了表示数的正(+)、负(-)号,就要将数的符号以“0”和“1”编码。通常把一个数的最高位定义为符号位,用“0”表示正,“1”表示负,称为数符,这种把数本身(数值部分)及符号一起数字化的数称为机器数,机器数是数在计算机内的表示形式,而这个数真正表示的数值称为真值。
⭐数的最高位为符号位0表示正,1表示负。
原码、反码、补码(假设计算机字长为8)
原码
整数x的原码指其数符位0表示正,1表示负。其数值部分就是x绝对值的二进制表示,通常用
[ x ]原 表示x的原码。例如:
[ +1 ]原 = 00000001 [ +127 ]原 = 01111111
[ - 1 ]原 = 10000001 [ - 127 ]原 = 11111111
由此可知,8位原码表示的最大值为2^7-1即127,最小值为-127,所能表示数的范围
是:-127 ~ 127。当采用原码表示时,编码简单,与真值转换方便。但原码也存在以下
一些问题:
在原码表示中,0有两种表示形式,即[ +0 ]原=00000000,[ -0 ]原=10000000。
零的二性定义给机器判断带来了麻烦。
原码进行四则运算时,符号位需要单独处理,增加了运算规则的复杂性。
反码
整数x的反码对于正数,与原码相同,对于负数,数符位为1,其数值位是x的绝对值取反,
即原码除了数符位其他数值位取反,通常用[ x ]反表示x的反码。例如:
[ +1 ]反 = 00000001 [ +127 ]反 = 01111111
[ - 1 ]反 = 11111110 [ - 127 ]反 = 10000000
由此可知,8位反码表示的最大值为2^7-1即127,最小值为-127,所能表示数的范围
是:-127 ~ 127,和原码相同。反码运算也不方便,很少使用,一般用作求补码的中间码。
补码
整数x的补码指对于正数,与原码、反码相同,对于负数,在反码的基础上加1。通常
用[ x ]补表示x的补码。例如:
[ +1 ]补 = 00000001 [ +127 ]补 = 01111111
[ - 1 ]补 = 11111111 [ - 127 ]补 = 10000001
⭐在补码中,0有唯一的编码,即[ +0 ]补=[ -0 ]补=00000000,因而多出了一个编码10000000来
扩展补码所能表示的数值范围,即负数最小-127扩大到-128。这里的最高位1既可以看作符号位,
又可以表示数值位,其值为-128,所以补码所能表示数的范围为-128~127。这就是补码与原码、反码最小值不同的原因。
⭐原码、反码、补码对于正数都是一样的。
对于负数:反码除了数符位其他数值位取反,补码:反码的基础上加1。
❓字长为n位的计算机,它能表示的无符号整数范围是多少?能表示有符号的整数范围是多少?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)