数据的表示
考点2:码制(原码/反码/补码/移码)
简介
符号位:0为正数,1为负数。
原码:最高位是符号位,其余低位表示数值的绝对值。
反码:正数的反码与原码相同,负数的反码是其绝对值按位取反(符号位不变)。
补码:正数的补码与原码相同,负数的补码是其反码末位加1(符号位不变)。
移码:补码的符号位按位取反。
计算机取数固定长度,取八位数,超过八位会被舍弃掉。
原码不参与计算,计算结果不对,补码才会参与计算,计算的话需要转换为补码再计算。
表示范围
原码:
定点整数
以3位为例的话,有-000,-001,-010,-011,000,001,010,011这八种情况,其中最高位为符号位,数据表示范围是-3到+3,因为其中包含了000和100,分别为+0和-0,本质都是0,因此一共有7个数码,以此类推数码个数的表达式为2^n-1。
数据范围,以最大值011加上001等于100,100转换一下是2^2,再减去001,就是2^2-1,类推一下,就可得出数据范围是-(2^(n-1)-1) ~ +(2^(n-1)-1)
定点小数
以3位为例,0.00,0.01,0.10,0.11,-0.00,-0.01,-0.10,-0.11,这八种情况,最高位表示符号位,数码数与定点整数一样。
数据范围,以最大的0.11加上0.01,等于1.00,即为1,1-0.01=1-2^(-2),以此类推,得公式为1-(2^-(n-1)),负数一样。
反码:
定点小数和定点整数一样
与原码计算逻辑相同。
补码:
定点整数
其他相同,只有一个人为规定的10000000数值-128,将-0利用了起来,因此数码个数不再需要减1,2^n。
数据范围最小值不需要再减一,直接转换为2^7,即2^(n-1),最大值的取值范围不变。
定点小数
一样,也有一个人为规定的-1,100
数据范围也是一样,从-1开始到1-2^-(n-1)
移码:
定点小数和定点整数一样。
由补码延展过来的,所以与补码的计算方式相同。
例题:
答案:D
解析:代入法,假设n为3,带入之后,A:8,B:-8,C:4,D:-4
当n为3时最大的数为3,因此排除A和B,题目中是n的补码,补码的-0是100为人为设定的,因此为-4,所以会取到-4,即D
答案:B
解析:90H是十六进制,需要转换为二进制先,
第一步分组,补0:
9 0
1001 0000
组合后是10010000,因为是补码,且最高的符号位是1为负数,所以可以求他的反码,用10010000减一即可,得到结果为10001111(符号位不变),然后再求出原码,负数的反码的原码是反码的按位取反(不涉及符号位),得到结果为11110000,最后转换为十进制数是-112,再除以2得到-56(2x,求x)