软件设计师各知识点复习笔记(更新中)
计算机组成与结构
计算机系统基础
比特、位、字节、字之间的换算
1位 =1bit
1字节=1Byte=8bit
1字 =1word=2Byte=16bit
1KB =1024B
1MB=1024KB
1GB =1024MB
原码、反码、补码、移码
-
原码
第一位是符号位,其余位即2进制数值。8位2进制数表示的范围是[-127,127]
如
[+3]原=0000 0011 [-3]原=1000 0011
-
反码
第一位是符号位,正数的反码等于原码,负数的反码除了符号位,在原码的基础上取反。 8位2进制数表示的范围是[-127,127]
如
[+3]反=0000 0011 [-3]反=1111 1100
-
补码
第一位是符号位,正数的反码等于原码,负数的补码除了符号位,在反码的基础上+1。 8位2进制数表示的范围是**[-128,127]**
如
[+3]补=0000 0011 [-3]补=1111 1101
-
移码
第一位是符号位,在补码的基础上,把符号位取反。 8位2进制数表示的范围是**[-128,127]**
如
[+3]移=1000 0011 [-3]移=0111 1101
校验码
奇偶校验码
奇偶校验码是奇校验码和偶校验码的统称,在实际使用时又可分为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验等几种。奇偶校验码无法检测出哪位出错.所以属于无法矫正错误的校验码,且只有奇数个错误位才能被检测出
校验位的确定
奇偶校验码的校验位可以放在原始码流的前面或者后面,即,
校验位+原始码流 或 原始码流+校验位
奇校验:如果原始码流中,1的个数为奇数,则校验位为0;1的个数为偶数,则校验位为1。
偶校验:如果原始码流中,1的个数为偶数,则校验位为0;1的个数为奇数,则校验位为1。
另一种思考方式:
奇校验:如果原始码流中,1的个数为偶数,需要把校验位定为1,使得整段检验码中1的个数保持为奇数。
偶校验:如果原始码流中,1的个数为奇数,需要把校验位定为1,使得整段检验码中1的个数保持为偶数。
例如:
设校验位在最后
原始码流 110 0111(1的个数为奇数)
奇校验 1100 1110
偶校验 1100 1111
海明校验码
被广泛采用的一种很有效的校验方法,是只要增加少数几个校验位,就能检测出二位同时出错、亦能检测出一位出错并能自动恢复该出错位的正确值的有效手段,后者被称为自动纠错。
校验位的确定
信息位的个数即原始码流的长度,用k表示;
校验位的个数用r表示。
他们之间满足
2
r
≥
k
+
r
+
1
2^r \geq k+r+1
2r≥k+r+1
校验位一般放在第20、21、…、2(r-1)位
例如:
原始码流 0011 0110 (k=8)
r=1时,2<1+8+1=10
r=2时,4<2+8+1=11
r=3时,8<3+8+1=12
r=4时,16>4+8+1=13 满足条件
海明校验码的总长度应为r+k=12位,校验码位置如下,
0011 r011 r0rr(r表示校验位)
海明校验码中 每一个信息位的校验都与不同的校验位相关,由位置决定,这里举例说明
位置 | 信息位的值 | 由哪几位校验位校验 |
---|---|---|
1 | 校验位 | – |
2 | 校验位 | – |
3 | 0 | 1和2(因为3=1+2) |
4 | 校验位 | – |
5 | 1 | 1和4(因为5=1+4) |
6 | 1 | 2和4(因为6=2+4) |
7 | 0 | 1和2和4(因为7=1+2+4) |
8 | 校验位 | – |
9 | 1 | 1和8(因为9=1+8) |
10 | 1 | 2和8(因为10=2+8) |
11 | 0 | 1和2和8(因为11=1+2+8) |
12 | 0 | 4和8(因为12=4+8) |
反过来再统计每个校验位校验哪几个信息位,并将对应的几个信息位用异或运算求值
校验位的位置 | 校验哪几个信息位 | 校验位的值 |
---|---|---|
1 | 3,5,7,9,11 | 0 ⨁ \bigoplus ⨁ 1 ⨁ \bigoplus ⨁ 0 ⨁ \bigoplus ⨁ 1 ⨁ \bigoplus ⨁ 0 = 0 |
2 | 3,6,7,10,11 | 0 ⨁ \bigoplus ⨁ 1 ⨁ \bigoplus ⨁ 0 ⨁ \bigoplus ⨁ 1 ⨁ \bigoplus ⨁ 0 = 0 |
4 | 5,6,7,12 | 1 ⨁ \bigoplus ⨁ 1 ⨁ \bigoplus ⨁ 0 ⨁ \bigoplus ⨁ 0 = 0 |
8 | 9,10,11,12 | 1 ⨁ \bigoplus ⨁ 1 ⨁ \bigoplus ⨁ 0 ⨁ \bigoplus ⨁ 0 = 0 |
由此可得,0011 0110的海明校验码为0011 0011 0000
循环冗余校验码(CRC校验码)
一种常用的、具有检错、纠错能力的校验码,奇偶校验码和海明校验码都是采用奇偶检测为手段检错和纠错的(奇偶校验码不具有纠错能力),而循环冗余校验则是通过某种数学运算来建立数据位和校验位的约定关系的。
校验位的确定
收发方约定好一个生成多项式G(x),注意,算法要求生成多项式G(x)必须包含最低次项(常数项)。
这里举例:
G(x)=x^3+x^2+l
将生成多项式G(x)每项都写出来,写成,
G(x)=1*x^3+1*x^2+0*x+1*l
将生成多项式G(x)每项的系数挑出来,得到除数1101;
设原始码流为110101,则110101为被除数。
计算110101/1101,得到余数——001,余数被看作冗余码添加到原始码流尾部,得到循环冗余校验码1101001。