文章目录
数据与文字的表示方法
定点表示法
机器码(机器数)
正数的原码、反码、补码一样,负数的原码、反码、补码的符号位均为1,数值位不同
原码
- 原码就是符号位加上二进制表示数的绝对值
- 缺点:两数相加的时候,如果是同号则数值相加,异号则进行减法(在进行减法的时候,还要进行比较绝对值的大小,然后大数减去小数,最后还要判断正确的符号位)
反码
- 反码就是在原码的基础上,正数的反码和原码相同,负数的原码,符号位仍然是1,数值位按位取反
补码
- 补码:用正数来表示负数
- 优点:不论数是正还是负,机器总是做加法,减法运算也可以转化为加法运算
- 负数如何从原码快速求补码?
符号位不变,同时从数值位的最低位的第一个1的右边(包括第一个1),左边全部取反即可
如何理解定点整数的补码?
我们还是利用时钟原理去理解:当你一个数包括符号位一共n位(可以表示256个数字)
非负数是0-127,负数是-128-1
顺时针时钟从0-127,从0出发,逆时针,分别是-1到-128,-1对应255的位置
- 如何快速求?
首先我们直接用256-5,则求的是251的原码,又255的原码是FFH,我们用FFH-4即可
移码
- 移码通常用于表示
浮点数的阶码
表示数的一个平移作用- 移码: [ e ] 移 [e]_移 [e]移= 2 k + e 2^k+e 2k+e,如何理解求移码,k位的整数,我们直接用真值e加上 2 k 2^k 2k即可。例如:
+10101 = 32 + 10101 = 1,10101
-10101 = 32 -10101 = 0,01011
# 也就是对于正数的移码,也就是增加一个最高位的符号1,但是对于负数的补码,就直接用定义去算即可
可以看到,在补码中,正数的符号位是1,负数的补码是0
其实,应该如何理解?补码是0-e,然后我们在补码的基础上+
2 k 2^k 2k`,也就是实现一个变换符号的一个功能。- 所以移码中符号位的设置与原码,反码,补码相反。
小结
浮点表示法
attention:为什么叫作浮点数?因为阶码可以取不同的值,导致小数点的位置不确定
当前的计算机采用统一的IEEE754标准
- S 是符号位,S=0表示正数,S=1表示负数,M是尾数,放在最低位,占用23位,E是阶码,占用8位,阶符采用隐含方式,即采用移码来表示正负指数。
E = e + 127
也就是阶码的表示是真值加上127的偏移量,确保了阶码的表示非负
E = 0,其实表示的是-127
e = 2 ,那么E=129
浮点数的规格化
浮点数的规格化:我们规定,当尾数不为0时,尾数域的最高有效位为1
==>我们可以省略最高位的1,所以23位数可以存储24位有效位,提高了精度我们如何从一个规格化的浮点数求它的真值? x = ( − 1 ) s ∗ ( 1. M ) ∗ 2 E − 127 x=(-1)^s*(1.M)*2^{E-127} x=(−1)s∗(1.M)∗2E−127
特殊情况:
E = 0和尾数M = 0:表示0
E = 255和尾数M = 0:表示无穷大
E = 255和尾数M ≠ 0:表示NaN
还存在非规格化数用于表示更小的浮点数 N = ( − 1 ) S ∗ ( 0. M ) ∗ 2 − 126 N=(-1)^S*(0.M)*2^{-126} N=(−1)S∗(0.M)∗2−126
尾数规格化
可以看到,原码表示的尾数规格化,最高的数值位一定是1;用补码表示的尾数规格化,符号位与最高的数值位相反
注意规格化下(8位),原码的正数最小的数是0.100 0000,最大的是0.111 1111;负数最大的是1.100 0000,最小的是1.111 1111;补码情况下,正数最小的是是0.100 0000,最大的是0.111 1111;负数最大的是1.011 1111(原码的形式是1.100 0001,最小的是1.000 0000(就是-1)。
总的来说,原码情况下,正数和负数分别能取到0.5和-0..5,然后另一边的绝对值接近1
补码情况下,正数取得到0.5,然后接近1;负数接近-0.5,但是可以取到-1
习题
十进制串的表示
字符与字符串的表示方法
汉字的表示方法
校验码
奇偶校验码
海明校验码
如何进行求解海明码?
(1)先根据公式求出校验的位数k
(2)在2的相对应的幂次位上插入校验位,利用的位号的关系,列出每一个校验位参与的实际位号
(3)根据奇偶校验的要求求出校验位的数字,得出最终的海明码
循环冗余码
习题