计算机常见编码
数字
无符号数
不表示符号位(默认表示正数),所有的数位都表示数值的一种表示方式
数值范围
1BYTE ——[0-255],256个数 —— 可以编码256种不同的状态 1111 1111 = 2^8
2BYTE ——[0-65535],65536个数 —— 可以编码65536种不同的状态 1111 1111 1111 1111 = 2^16
4BYTE ——[0-4294967295],43亿个数 —— 可以编码43亿种不同的状态 1111 1111 1111 1111 1111 1111 1111 1111 = 2^32
编码状态计算方法
如果是统计状态,根据二进制位数的个数来进行计算
计算方式 状态个数=2^(1的个数)
例如:1111 1111 状态的个数就是 2^8
扩展:二进制从低位右边往高位左边的权依次是:
2^0 2^1 2^2 2^3 2^4 2^5 2^6 2^7
有符号数
又称机器数,约定二进制位最高位表示符号位,其他位表示数值位
符号位0表示正数,符号位1表示负数
对有符号数,计算机中存储和使用它的补码形式
补码: 将减法转化为加法计算 a-b=a+(-b)
使用补码可以减少逻辑电路的种类,降低硬件的成本,提高计算机的稳定性
正数的原码 = 反码 = 补码
负数:
- 原码:按约定表示的符号数(最高位为1),即机器数
- 反码:符号位不变,其他位按位取反 - 0->1,1->0
- 补码:符号位保持不变,反码+1
一个数的补码转化为原码的方法与它的原码转换为补码的方法完全相同
真值 44D —— +010 1100B
真值 -44D —— -010 1100B
有符号数数值范围:
1B
原码:[-127,+127] —— [-(2^7-1),+ 2^7-1] 两个0——1000 0000 和 0000 0000都表示0
反码:[-127,+127] —— [-(2^7-1),+ 2^7-1] 两个0——1111 1111 和 0000 0000都表示0
补码: [-128,+127] —— [-2^7,+ 2^7-1] 一个0 —— 0000 0000 表示0, 1000 0000 表示-128
补码运算
两个补码的运算结果还是一个补码
如果产生最高位的进位,则称 “溢出位” ,在补码运算中溢出位可直接丢弃
西文字符
字符编码值的大小无意义,仅作为识别这些字符的依据
ASCII码
American Standard Code for Information Interchange
美国标准信息交换码
是一种定长码,是个人计算机中最常见的字符编码
ASCII码表
二进制 | 十进制 | 十六进制 | 符号 | 二进制 | 十进制 | 十六进制 | 符号 |
---|---|---|---|---|---|---|---|
00000000 | 0 | 00 | NUL | 01000001 | 65 | 41 | A |
00000001 | 1 | 01 | SOH | 01000010 | 66 | 42 | B |
00000010 | 2 | 02 | STX | 01000011 | 67 | 43 | C |
00000011 | 3 | 03 | ETX | 01000100 | 68 | 44 | D |
00000100 | 4 | 04 | EOT | 01000101 | 69 | 45 | E |
00000101 | 5 | 05 | ENQ | 01000110 | 70 | 46 | F |
00000110 | 6 | 06 | ACK | 01000111 | 71 | 47 | G |
00000111 | 7 | 07 | BEL | 01001000 | 72 | 48 | H |
00001000 | 8 | 08 | BS | 01001001 | 73 | 49 | I |
00001001 | 9 | 09 | HT | 01001010 | 74 | 4A | J |
00001010 | 10 | 0A | LF | 01001011 | 75 | 4B | K |
00001011 | 11 | 0B | VT | 01001100 | 76 | 4C | L |
00001100 | 12 | 0C | FF | 01001101 | 77 | 4D | M |
00001101 | 13 | 0D | CR | 01001110 | 78 | 4E | N |
00001110 | 14 | 0E | SO | 01001111 | 79 | 4F | O |
00001111 | 15 | 0F | SI | 01010000 | 80 | 50 | P |
00010000 | 16 | 10 | DLE | 01010001 | 81 | 51 | Q |
00010001 | 17 | 11 | DC1 | 01010010 | 82 | 52 | R |
00010010 | 18 | 12 | DC2 | 01010011 | 83 | 53 | S |
00010011 | 19 | 13 | DC3 | 01010100 | 84 | 54 | T |
00010100 | 20 | 14 | DC4 | 01010101 | 85 | 55 | U |
00010101 | 21 | 15 | NAK | 01010110 | 86 | 56 | V |
00010110 | 22 | 16 | SYN | 01010111 | 87 | 57 | W |
00010111 | 23 | 17 | ETB | 01011000 | 88 | 58 | X |
00011000 | 24 | 18 | CAN | 01011001 | 89 | 59 | Y |
00011001 | 25 | 19 | EM | 01011010 | 90 | 5A | Z |
00011010 | 26 | 1A | SUB | 01011011 | 91 | 5B | [ |
00011011 | 27 | 1B | ESC | 01011100 | 92 | 5C | \ |
00011100 | 28 | 1C | FS | 01011101 | 93 | 5D | ] |
00011101 | 29 | 1D | GS | 01011110 | 94 | 5E | ^ |
00011110 | 30 | 1E | RS | 01011111 | 95 | 5F | _ |
00011111 | 31 | 1F | US | 01100000 | 96 | 60 | ` |
00100000 | 32 | 20 | 空格符 | 01100001 | 97 | 61 | a |
00100001 | 33 | 21 | ! | 01100010 | 98 | 62 | b |
00100010 | 34 | 22 | " | 01100011 | 99 | 63 | c |
00100011 | 35 | 23 | # | 01100100 | 100 | 64 | d |
00100100 | 36 | 24 | $ | 01100101 | 101 | 65 | e |
00100101 | 37 | 25 | % | 01100110 | 102 | 66 | f |
00100110 | 38 | 26 | & | 01100111 | 103 | 67 | g |
00100111 | 39 | 27 | ’ | 01101000 | 104 | 68 | h |
00101000 | 40 | 28 | ( | 01101001 | 105 | 69 | i |
00101001 | 41 | 29 | ) | 01101010 | 106 | 6A | j |
00101010 | 42 | 2A | * | 01101011 | 107 | 6B | k |
00101011 | 43 | 2B | + | 01101100 | 108 | 6C | l |
00101100 | 44 | 2C | , | 01101101 | 109 | 6D | m |
00101101 | 45 | 2D | - | 01101110 | 110 | 6E | n |
00101110 | 46 | 2E | . | 01101111 | 111 | 6F | o |
00101111 | 47 | 2F | / | 01110000 | 112 | 70 | p |
00110000 | 48 | 30 | 0 | 01110001 | 113 | 71 | q |
00110001 | 49 | 31 | 1 | 01110010 | 114 | 72 | r |
00110010 | 50 | 32 | 2 | 01110011 | 115 | 73 | s |
00110011 | 51 | 33 | 3 | 01110100 | 116 | 74 | t |
00110100 | 52 | 34 | 4 | 01110101 | 117 | 75 | u |
00110101 | 53 | 35 | 5 | 01110110 | 118 | 76 | v |
00110110 | 54 | 36 | 6 | 01110111 | 119 | 77 | w |
00110111 | 55 | 37 | 7 | 01111000 | 120 | 78 | x |
00111000 | 56 | 38 | 8 | 01111001 | 121 | 79 | y |
00111001 | 57 | 39 | 9 | 01111010 | 122 | 7A | z |
00111010 | 58 | 3A | : | 01111011 | 123 | 7B | { |
00111011 | 59 | 3B | ; | 01111100 | 124 | 7C | | |
00111100 | 60 | 3C | < | 01111101 | 125 | 7D | } |
00111101 | 61 | 3D | = | 01111110 | 126 | 7E | ~ |
00111110 | 62 | 3E | > | 01111111 | 127 | 7F | DEL |
00111111 | 63 | 3F | ? | ||||
01000000 | 64 | 40 | @ |
- 基本版: 7位编码,8位存储 共可表示 2^7 = 128 个字符,最高位可作为奇偶校验位(多少个1)
特点:
1.存储时,字节的最高位总是为0
2.数字字符、大写字母、小写字母分别连续编码
3.小写字母的编码-对应的大写字母编码=32 例如:97(a) -65(A)=32
4.控制字符——34个,又称非图形字符,编码范围0-32和127
5.普通字符——94个,又称为图形字符,编码范围33-126
- 扩充版:8位编码,8位存储——共可表示2^8=256个字符
常见的字符ASCII码
00D(00H) —— 0000 0000B —— NUL
10D(0AH) —— 0000 1010B —— 换行符
13D(0DH) —— 0000 1101B —— 回车符
32D(20H) —— 0010 0000B —— 空格符
48D(30H) —— 0011 0000B —— 数字字符"0"
57D(39H) —— 0011 1001B —— 数字字符"9"
65D(41H) —— 0100 0001B —— 大写字母"A"
90D(5AH) —— 0101 1000B —— 大写字母"Z"
97D(61H) —— 0110 0001B —— 小写字母"a"
122D(7AH) —— 0111 1000B —— 小写字母"z"
127D(7FH) —— 0111 1111B —— DEL
EBCDIC码
- 概念 —— Extended Binary Coded Decimal Interchange Code, 扩展的2-10进制的交换码
说明:IBM公司的大型机专用,个人计算机和操作系统仍使用ASCII码,EBCDIC码英文字母的编码不连续
中文字符
概述
汉字处理:
- 键盘上无汉字,不能直接利用键盘输入,需要输入码来对应
- 不同的输入码输入后按统一的标准编码,为了与ASCII码区分,在计算机内的存储需要机内码表示,以便存储、处理和传输
- 汉字量大,字形变化复杂,需要用对应的字库来存储
- 汉字的输入、存储、处理、输出过程中使用的汉字编码不同,之间要进行相互转换
- 处理流程:
输入码(外码) -> 交换码(国际码) - > 机内码(内码) -> 输出码(字形码)
输入码(区位码) + 2020H = 交换码(国际码)
交换码(国际码) + 8080H = 机内码(内码)
输入码:
通过键盘:
1.音码-拼音输入法
2.形码-五笔字型
3.音形结合码 智能ABC
4.区位码:一字一码,没有重码
(区号+位号,组成一个4位的10进制数,作为一个汉字的编码)
94区(01-94,行) 94位(01-94,列)
人工智能:
1.语音识别
2.手写识别
3.光学识别OCR
交换码:
1.西文字符:ASCII、EBCDIC
2.中文字符:国标码(基于区位码GB2312的交换码形式)、UTF-8
实际上 交换码=区位码+2020H 是为了避开ASCII码的前32位控制字符(控制字符0-32和127) 控制字符不会存储,计算机接收会马上做出反应
机内码
它是计算机内部在存储、处理汉字时使用的编码
(区分汉字和英文字符)
特点:
1.常见汉字的机内码使用连续的2个字节存储
2.每个字节的最高位都为1
机内码 = 国标码 + 8080H 国标码最大表示为7E7E=0111 1111 0111 1111 为了每个字节第一位为1所以加上8080H
输出码
字形码:汉字在显示或打印时使用的编码
使用n*m个像素点来存储和表示一个汉字的字形
1.点阵字形
2.矢量字形
点阵字形
使用N*M个像素点来存储和表示一个汉字的字形
点阵字形的存储容量= n*m 位
点阵字形的规模越大,字形越清晰,所需存储空间的容量越大
矢量字形
使用几何图元,用数学方程的形式来描述一个汉字的字形
优点:放大,缩小,旋转不会失真,显示效果更好
国标码
GB2312-80
1980颁布,1981实施
6763个汉字:一级常用汉字3755个拼音顺序排序,二级常用汉字3008个部首顺序排序
三种形态:
1.输入码(区位码) 最高位都是0
2.交换码(国标码) 最高位都是0
3.机内码 最高位都是1
GBK
1995年制定的内码扩展规范,包含了21003个汉字和883个图形符号,一共21886个字符编码
使用两个连续的字节存储一个汉字的编码
为了与ascii码区分,第一个字节的最高位是1,第二个字节的最高位可能是0或1
包括GB2312的所有的简体字和BIG5的所有繁体字
是对GB2312的扩充,与GB2312向下兼容
GB18030
2000年制定,2005改版
最新的国家强制标准
特点:可变长编码,可以使用连续的1、2或4个字节表示一个中国字,常见的汉字仍使用2个字节
共70244个中国字(包括少数民族的文字),简体繁体汉字的数量是27484个
与GB2312和GBK向下兼容
机内码
BIG5
1984年,台湾省的行业标准
BIG5又称大五码,台湾省和香港等繁体地区使用
BIG5是内码,使用两个字节表示一个汉字,包含13053个繁体字
UNICODE
是一个国际编码标准,又称"万国码"、“统一码”
- utf-8:一种可变长编码,采用1~6个字节的编码位,与ASCII码兼容
- utf-16:一种可变长编码,采用2或4个字节的编码位,与ASCII码不兼容
- utf-32:一种定长编码,固定的采用4个字节的编码位,与ASCII码不兼容
汉字处理的常见问题
-
全半角字符
1.全角字符:两个字存储,宽度与汉字相同
2.半角字符:一个字节存储,宽度是汉字一半 -
字库
在操作系统中,通常以字库文件的形式存在
字库中保存的是汉字的字母,显示或打印输出时按照内码检索字库,输出字模 -
乱码
乱码的产生:文件在保存时用A编码,打开时用B编码,A与B不兼容