进制以及转换
计算机内部的数据都是使用二进制来表示的
进位计数发: 是一种常规使用的技术方法,生活中最常用的是十进制的计数法;
每个数位用到的不同的数码叫做基数,十进制的基数就是10,逢十进一;
常用的进制数目:
二进制,八进制,十六进制;其中十六进制除了09以外分别用A,B,C,D,E,F表示1015
进制之间的转换
- 4,8,16 等与2进制转换
2 进制 -> 8 进制 : 将3个二进制的位数转换成一个8进制的数;高位补0
2 进制 -> 16 进制 : 将4个二进制的位数转换成一个16进制的数; 高位补0
任意进制转化成10进制,将各个数码和他们的权值相乘,然后再把乘积相加就得到了一个十进制的数。这就是按权展开相加
二进制在计算机内部的应用:
真值和机器数: 真值就是实际的数值,机器数就是真值在计算机内的表示
1. 原码 正数就是真值的二进制码
2. 反码 除了符号位,全部取反
3. 补码 正数不变,负值在上述反码的基础上+1
4. 移码 其表示形式与补码相似,只是其符号位用 “1” 表示正数,用 “0” 表示负数,数值部分与补码相同
字符以及编码
BCD码 - 二进制编码的十进制数
使得二进制和十进制之间可以快速的转换;
- 8421码
各个位置的权值8,4,2,1; 数值等与 8a1+4a2+2*a3 + a4
例如 1001 = 8+1=9;
相加的和大于这个范围,加上6修正,并且像高位进位;
-
余3码
这是一种无权码,在8421码的基础上加上0011形成的,每个数都多余3 例如8-> 1011, 9-> 1100 -
2421码
特点是大于5的部分,第二位最高位1,小于5的部分位0;
字符串编码 ASCII
计算机只能识别二进制代码,所有的字符都是按照一定的规则和一组二进制编码对应起来表示的
国际上普遍采用的是7位二进制的ASCII码 可以表示10个10进制数码52个英文大小写字母和一定数量的专用符号!等128个字符;
0~31 是控制字符
32是空格
32-126是可印刷字体
用到了8bit,但是第一个比特位永远都是0, 所以总数是127个8 bit= 1 Byte 所以是单字节符号
详细的对照便参考
ASCII
汉字的编码
因为汉字的数目比较多,用两个字节来表示一个汉字
1981年GB2 - 1980 一共收集到了汉字3755个耳机汉字3008个 各种符号682个攻击7445个
最新的汉字标准 GB8030 收录了汉字27484个汉字,采用1B,2B,4B;
汉字的编码包括 输入编码,汉字内码,汉字字形码3种; 分别用于计算机内部的 输入,处理和输出三种用途;
区位码和国标码的转换
区位码就是十进制2位 94 * 94的矩阵
国标码 = 区位码16进制 + 2020H
汉字内码 = 国标码16进制 + 8080H
为了区分英语和汉字字符,最高位都改成1是;
校验码
校验码是指能够发现或者自动纠正错误的数据编码,也叫做检错纠错编码;
原理就是通过增加一些冗余码来检验或者纠错编码; 应用领域: 网络数据传输的 差错控制部分
- 奇偶校验码:
在原来的编码上增加一个校验位,码距为2,可以检测出一位(奇数位),不能检测偶数的错误;
可以发现错误但是不能纠正错误,不知道具体的错误位置;
例题理解: 给出两个编码的奇校验码 偶校验码
1001101 是7位数字 加上校验码使得所有的1为奇数所以四个加上1 11001101 , 偶数校验01001101;
- 海明校验码 汉明校验码
实际上是一种 多重 的奇偶校验码,原理就是在有效信息位里面加入校验码形成汉明码;
当某一个位数出错的时候,会造成
L - 1 = D + C ; D >= C ;
最小码距 L 越大,检测错误的位数D越大, 纠正错误位数C;
例如: n=4,k=3,求1010的海明码;
(1)首先确定海明码的位数: n为有效信息为,k位校验码,
n + k <= pow(2,K) -1 , 1010 为4位;
4 + 3 <= 8 -1
所以一共是7位
(2)校验码的位置都处2的power; 1, 2 , 4
(3) 分组形成校验关系
第三个位上数字由 P1 P2 矫正
第5 有P1 P3矫正
第6 有P2 P3矫正
第7 有P1 P2 P3矫正
D4,D3,D2,P3,D1,P2,P1
P1 = D1 XOR D2 XOR D4 = 0 1 1 = 0
P2 = D1 XOR D3 XOR D4 = 0 0 1 = 1
P3 = D2 XOR D3 XOR D4 = 1 0 1 = 0
校验的时候
S1=P1 XOR D1 XOR D2 XOR D4 = 0 表示校验码一致;
S1S2S3=000 表示无错,如果不是的话就可以发现纠错的目的,找到错误的地方 直接取反;
循环冗余校验码 CRC码
在K位信息吗后再拼接R位的校验码,整个编码的长度位N位;因此这个编码又叫做NK码
CRC基于线性编码的理论再发送端,将发送的二进制消息想左移动R位,将它与生成多项式G(x)做模2除法;
如果无错就是整除,其中生成的多项式和接受的编码是一个约定
例如G(X)的最高整数位位R则对应的二进制数有R+1位。
例如: G(x)=x^3 + x^2 + 1; 信息码位101001 求对应的CRC码:
R=3 K=6 N=6+3=9
101001000 MOD 1101 = 001
计算的结果CRC码为: 101001001