文章目录
1.数据表示
1.1进制转换
进制 | 数码 | 基数 | 位权(k代表第几位) |
---|---|---|---|
十进制(D) | 0,1,2,3,4,5,6,7,8,9 | 10 | 10 k {10}^{k} 10k |
二进制(B) | 0,1 | 2 | 2 k {2}^{k} 2k |
十六进制(H) | 0~9,A,B,C,D,E,F | 16 | 16 k {16}^{k} 16k |
1.2按权展开法
-
要将R进制转换成十进制:先将R进制数的每一位数值用R的k次方来表示,k与该位和小数点之间的距离有关,在小数点左边,k是该位和小数点之间数码的个数;在小数点右边,k为负值,其绝对值为该位和小数点之间数码的个数加一。
-
如:
- 0.1:左边0的位权上的k是0,右边1的位权上的k是1
- 二进制100.1 = 1×2的3次方 + 1×2的-1次方 = 十进制所表示的数8.5
1.3短除法
-
将十进制转R进制的使用短除法(除基取余法)
-
如:
- 将94转换为十六进制,先用94除以16等于5,余14;再用5除以16等于0,余5
所得到的余数从后面往前记录,则为5EH(5是最后一个余数,E是第二个余数14,H表示这是个十六进制数)。
1.4二进制转八进制和十六进制
1、因为八进制的数码最大到7,用二进制表示为101,需要三位数,所以用二进制转八进制可以三位三位的看,三位数字相当于一个八进制数,最高位不够三位就补0;八进制转二进制就反过来。
如:二进制10001110——>拆分成010,001,110,每三位对应八进制数是2,1,6,所以对应的八进制数是216
八进制216,将每一位数字转为二进制,再拼起来就是对应的二进制数
2、因为十六进制的数码最大的数码是15,用二进制表示为8421,需要四位数,所以二进制转十六进制可以四位四位的看,最高位不够四位就补0;十六进制转二进制反过来即可。
如:二进制10001110——>拆分成1000,1110,每四位对应的十六进制数为8,E,所以对应的十六进制数为8E
1.5原/反/补/移码
数值1 | 数值-1 | 1-1(将数值1和数值-1相加) | |
---|---|---|---|
原码 | 0000 0001 | 1000 0001 | 1000 0010 |
反码 | 0000 0001 | 1111 1110 | 1111 1111 |
补码 | 0000 0001 | 1111 1111 | 0000 0000 |
移码 | 1000 0001 | 0111 1111 | 1000 0000 |
- 原码:最高位为符号位,0是正数1是负数,其余低位表示数值的绝对值
- 反码:正数的反码和原码相同,负数的反码是其绝对值的按位取反(符号位不变)
- 补码:正数的补码与原码一样,负数的补码是其反码末位加一(符号位不变)
- 移码:补码的符号位按位取反
eg:
-10的原码:1000 1010
-10的反码:1111 0101 (符号位不变)
-10的补码:1111 0110 (反码+1)
补码取反:0000 1001 (符号位一起取反)
码制 | 定点整数 | 定点小数 | 数码个数 |
---|---|---|---|
原码 | [ − ( 2 n − 1 − 1 ), + ( 2 n − 1 − 1 ) ] [-( {2}^{n-1} -1) , +( {2}^{n-1} -1)] [−(2n−1−1),+(2n−1−1)] | [ − ( 1 − 2 − ( n − 1 ) ), + ( 1 − 2 − ( n − 1 ) ) ] [-( 1- {2}^{-(n-1)} ) , +(1- {2}^{-(n-1)} )] [−(1−2−(n−1)),+(1−2−(n−1))] | 2 n − 1 {2}^{n} -1 2n−1 |
反码 | [ − ( 2 n − 1 − 1 ), + ( 2 n − 1 − 1 ) ] [-( {2}^{n-1} -1) , +( {2}^{n-1} -1)] [−(2n−1−1),+(2n−1−1)] | [ − ( 1 − 2 − ( n − 1 ) ), + ( 1 − 2 − ( n − 1 ) ) ] [-( 1- {2}^{-(n-1)} ) , +(1- {2}^{-(n-1)} )] [−(1−2−(n−1)),+(1−2−(n−1))] | 2 n − 1 {2}^{n} -1 2n−1 |
补码 | [ − 2 n − 1 , + ( 2 n − 1 − 1 ) ] [- {2}^{n-1} , +( {2}^{n-1} -1)] [−2n−1,+(2n−1−1)] | [ − 1 , + ( 1 − 2 − ( n − 1 ) ) ] [-1 , +(1- {2}^{-(n-1)} )] [−1,+(1−2−(n−1))] | 2 n {2}^{n} 2n |
移码 | [ − 2 n − 1 , + ( 2 n − 1 − 1 ) ] [- {2}^{n-1} , +( {2}^{n-1} -1)] [−2n−1,+(2n−1−1)] | [ − 1 , + ( 1 − 2 − ( n − 1 ) ) ] [-1 , +(1- {2}^{-(n-1)} )] [−1,+(1−2−(n−1))] | 2 n {2}^{n} 2n |
注意事项:
-
n表示的这个数有多少个数位,数位第一位置是符号位,其余的位置的数值位置,如n=3,则100则不是-0,而是为规定值 − 2 n − 1 -{2}^{n-1} −2n−1,也就是-4,是人为定义的,其值相当于是将符号位也一起加进去运算算数值,100=-(2的2次方)=-4。
-
如果是定点小数也得把第一个数位看作符号位,小数点后面的就看作次数为负数的位权,eg:0.01——> + ( 1 + 1 × 2 − 2 ) + (1+ 1× {2}^{-2}) +(1+1×2−2)
1.6浮点数运算
- 浮点数表示:
N = 尾数 ∗ 基数 指数 N = 尾数*{基数}^{指数} N=尾数∗基数指数
其中指数也叫做阶码,决定尾数正负的是数符,决定阶码正负的是阶符
- 运算过程:
对阶>尾数计算>结果格式化
1.对阶(阶码小的化成和大的阶码一样)
2.化完之后再用尾数进行相加
3.再把结果格式化
- 特点:
- 尾数一般用补码,阶码一般用移码
- 阶码的位数决定数的表示范围,位数越多范围越大
- 尾数的位数决定数的有效精度,位数越多精度越高
- 对阶是通过较小的数的尾数右移实现的
1.7逻辑运算
逻辑变量之间的运算称为逻辑运算:
短路原则:
在逻辑表达式的求解中,并不是所有逻辑运算符都要被执行,如a&&b,只有a是真才会去判断b的真假
2.校验码
2.1奇偶校验码
- 码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数 就称为数据校验码的码距(eg:在二位数集合{00,01,11}中最多有两位可以变化,最少有一位,所以码距为1)
- 奇偶校验码的编码方法:由若干位有效信息位,再加上一个二进制位(校验码)组成校验码
- 奇校验:整个校验码(有效信息位和校验位)中的“1”的个数为奇数
- 偶校验:整个校验码(有效信息位和校验位)中的“1”的个数为偶数
- 特点:可检查一位(奇数位)的错误,不可纠错
2.2CRC循环冗余校验码
- 可检错,不可纠错
- CRC编码方法:在k位信息码之后拼接r位校验码。
- 把接收到的CRC码用生成多项式G(X)去除(模二除法),如果正确,余数为0;如果某一位出错,余数不为0
2.3海明校验码
- 可检错,也可纠错
- 海明校验码的原理是:在有效信息位中加入几个校验位形成海明码,使码距比较均匀地拉大(不为1),并把海明码的每个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错误,还能指出错误的位置,为自动纠错提供了依据