- BCD
- 格雷码
- 定/浮点数
- CRC
- 海明
BCD码
- 8421
- 2421
- 余3
8421
略.1010~1111无效.
2421
无重复但有多值.对9自补规则取消多值.0101-1010无效.
余3
平衡8421的无效区间使其对9自补.
VALUE=8421+3.
格雷码
最高位不变,其余位
G
i
=
B
i
+
1
⊕
B
i
G_i=B_{i+1}\oplus B_i
Gi=Bi+1⊕Bi
就是卡诺图中用的顺序.相邻只有一位不同.
特点:编/解码相同
可靠编码
码距:任意两个合法编码不同位数最小值
≥ e + 1 \geq e+1 ≥e+1单独检测e位
≥ 2 t + 1 \geq 2t+1 ≥2t+1单独纠错t位
≥ e + t + 1 \geq e+t+1 ≥e+t+1联合检测纠错
奇偶校验
通过操作一位校验码使编码中1的个数为奇数/偶数
- 不能纠错
- 不能检出偶数个错误
CRC(⚠)
Ref:https://zhuanlan.zhihu.com/p/26469035
注意:
- 使用XOR来代替减法
- 其中被除数是需要计算校验和的信息数据流的二进制表示;除数是一个长度为(n+1)的预定义(短)的二进制数,通常用多项式的系数来表示。在做除法之前,要在信息数据之后先加上n个0.
- 发送码串的时候,在原始码串后面加上CRC。CRC一般有8bit,16bit,和32bit。
- 接收者收到M和R后,检查 M ( x ) ⋅ x n + R ( x ) M(x)\cdot x^{n}+R(x) M(x)⋅xn+R(x)是否能被 K ( x ) K(x) K(x)整除。如果是,那么接收者认为该信息是正确的。
- 这里M(x)是原始的信息多项式。K(x)是n阶的“钥匙”多项式。
海明校验
Ref:https://blog.51cto.com/winda/1068000
- 一个可以有多个校验位,具有检测并纠正一位错误代码的纠错码
- 海明码的检错、纠错基本思想是将有效信息按某种规律分成若干组,每组安排一个校验位进行奇偶性测试,然后产生多位检测信息,并从中得出具体的出错位置,最后通过对错误位取反(也是原来是1就变成0,原来是0就变成1)来将其纠正。
要使用海明码纠错,首先就要确定发送的数据所需要要的校验码(也就是“海明码”)位数(也称“校验码长度”)。它是这样的规定的:假设用N表示添加了校验码位后整个信息的二进制位数,用K代表其中有效信息位数,r表示添加的校验码位,它们之间的关系应满足:
N
=
K
+
r
≤
2
r
-
1
N=K+r≤2^r-1
N=K+r≤2r-1,即完成后的编码位数小于等于
2
r
−
1
2^r-1
2r−1.
这些校验码不是直接附加在信息码的前面、后面或中间的,而是分开插入到不同的位置。但不用担心,校验码的位置很容易确定的,那就是校验码必须是在
2
n
2^n
2n次方位置,如第1、2、4、8、16、32,……位(对应20、21、22、23、24、25,……,是从最左边的位数起的),这样一来就知道了信息码的分布位置,也就是非
2
n
2^n
2n次方位置,如第3、5、6、7、9、10、11、12、13,……位(是从最左边的位数起的)
浮点数
32bits 1位符号位 8位阶码 23位尾码->精度23位有效数字
- 提取符号位
- 将二进制串转换为 1. ∗ ∗ ∗ ∗ ∗ × 2 e 1.*****\times 2^e 1.∗∗∗∗∗×2e
- 移码=e+127
- 尾码=********
规格化
Ref:https://blog.csdn.net/xiaomibuqiang91/article/details/73956620
在尾数用补码表示时,规格化浮点数应满足尾数最高数位与符号位不同,如相同就是不满足规格化.
若不对浮点数的表示作出明确规定,同一个浮点数的表示就不是唯一的。例如,十进制数可以表示成1.11×10ˇ0,0.111×10ˇ1,0.0111×10ˇ2等多种形式。为了提高数据的表示精度,当尾数的值不为0时,尾数域的最高有效位应为1(也就是
1.
∗
∗
∗
∗
∗
×
1
0
∗
1.*****\times 10^*
1.∗∗∗∗∗×10∗),这称为浮点数的规格化表示。否则以修改阶码同时左右移小数点位置的办法,使其变为规格化数的形式。
但在IEEE754标准中,一个规格化的32位浮点数x的真值表示为:
x=(-1)ˇS×(1.M)×2ˇ(E-127) e=E-127 其中S是浮点数的符号位,占1位。M是尾数,放在低位部分,占用23位,小数点位置放在尾数域最左(最高)有效位的右边。E是阶码,占用8位。它的尾数域所表示的值是1.M。e为实际指数。因为规格化浮点数的尾数域最左位(最高有效位)总是1,故这一位经常不予存储,而认为隐藏在小数点的左边。
其他
大端模式:数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中,这种存储模式就类似把数据当做字符串顺序处理,例如:数据中两个字节按顺序为:FE
10 ,它表示的一个数就是0xFE10。换句话说:内存的低地址存放着数据高位;
小端模式:数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中,这种存储方式就是将地址的高低和数据的位结合起来,前面的例子按照小端模式表示,应该为:0x10FE。
换句话说:内存的低地址存放着数据低位。
32位下
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
Ref
https://www.cnblogs.com/candycaicai/archive/2010/12/21/1912986.html
https://blog.csdn.net/liushuijinger/article/details/7429197
https://blog.csdn.net/lyl0625/article/details/7350045