整数在计算机中的表示
在计算机中,因为只有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位的计算机,它能表示的无符号整数范围是多少?能表示有符号的整数范围是多少?
💡字长为n位的计算机,它能表示无符号的整数范围是0~2^(n-1)-1,它能表示有符号的整数范围
是-2^(n-1)~2^(n-1)-1.
浮点数在计算机中的表示
计算机中小数点是不占位置的。因此规定根据小数点的位置来表示,分别为定点整数、定点小数
和浮点数三种形式。
定点整数
指小数点隐含固定在机器数的最右边,定点整数是纯整数。
符号位 数值部分 .(小数点位置)
定点小数
约定小数点位置在符号位与有效数值部分之间,定点小数是纯小数,即所有数绝对值均小于1。
符号位 . (小数点位置)数值部分
浮点数
定点数表示的数在实际应用中是不够用的,尤其在科学计算中。为了能表示特大或特小的数,采用“浮点数”或称“指数形式”表示。
浮点数由阶码和尾数两部分组成:阶码用定点整数来表示,阶码所占的位数确定了数的范围。
尾数用定点小数来表示,尾数所占的位数确定了数的精度。
浮点数的表示方法和科学计数法相似,任意一个数均可通过改变其指数部分,是小数点发生移动,
如十进制数56.78可以表示为5.678*10^1、0.5678*10^2、0.05678*10^3等各种不同形式。
在计算机中,浮点数的一般表示形式为N=2^E*D,E为阶码,D为尾数。
对于不同的机器,阶码和尾数各占多少位,分别用什么码制进行表示都有具体规定。在实际应用中,浮点数的表示首先要进行规格化,即转换成2^E与一个纯小数之积,并且小数点后的第一位是1,这样的浮点数称为规格化数。