数字储存方式--存二进制
十进制转二进制即可
二进制
31 变成二进制
经过一番尝试
所以 31(十进制) = 01 1111(二进制)
十六进制
一般用十六进制表示二进制(因为二进制写起来太慢了)
方法一
- 二进制数:011110001011010
- 记住8421对应XXXX
- 从右往左每四位改写成一位:011 1100 0101 1010
- 得到3,12,5,10
- 把大于9的数字改为ABCDEF
- 于是得到3C5
方法二
用计算机的程序员模式
HEX表示16进制, DEC表示10进制, OCT表示8进制, BIN表示2进制
字符储存方式--字符编码--存编码
英文编号(ASCII 码
编码方式:先把这128个字符按照顺序给它一个十进制数字(从0到127)来编号,如下图。
然后储存时便会把这些字符的十进制数字变成二进制数字储存
- 一个16进制数是4个0/1位
- 0表示结束字符
- 10表示换行
- 13表示回车
- 32(二进制00100000)表示空格
- 33到47表示标点
- 48到57表示数字符号
- 49(二进制00110001)是数字符号1
- 65到90表示大写字母
- 65(二进制01000001)是大写的字母A
- 97到122表示小写字母
- 97(二进制01100001)是小写字母a
- 127表示删除键(二进制01111111)
中文编号(GB2313)
用 0000~FFFF 表示汉字
编码方式:用16进制(从0000到FFFF)来编号。占用两个字节。然后储存时便会把这些十六进制数字变成二进制数字储存
- 一个16进制数是4个0/1位
- FFFF就是4x4=16位,也就是两个字节
- 最多收录 2^16 = 65536 个字符
- 但只收录了 6000 多汉字、西文字母和日文假名
「你」的 GB2312 编号为 C4E3
「牛」的 GB2312 编号为 C5A3
国标扩(GBK)
编码方式:同GB2312,用16进制(从0000到FFFF)来编号。占用两个字节。然后储存时便会把这些十六进制数字变成二进制数字储存
- 含21886个汉字和图形符号
- 收录了中日韩使用的几乎所有汉字
- 完全兼容 GB2312
- 依然使用 16 位(两字节)
- 后来国标局推出 GB18030 取代 GBK GB18030 不兼容 GB2312
万国码(Unicode)
- 将世界上所有的符号都纳入其中的一个字符集,已收录13万字符(大于16位),全世界通用。而且一直在更新中。
- 每个字符占三个及以上字节。所以很占内存。
- 字符编码UTF-8
(2)它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
(3)这样就节省了不必要使用的空间
(4)UTF-8中8是指最少可用8位,也就是一个字节,来存一个字符
(5)例如存储「a」
- a对应的Unicode编号为97,十六进制为61
- Unicode直接存:00000000 00000000 01100001
- UTF- 8偷懒存法:01100001
- 三字节变一字节,比GBK还省
(6)例如存储「你」
- 你对应的Unicode编号为4F60
- Unicode直接存:00000000 01001111 01100000
- UTF-8偷懒存法:11100100 10111101 10100000
- 还是三字节,汉字似乎没有省,但是字母都能省一点
(7)UTF-8 的编码规则很简单,只有二条:
- 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。
- 对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
(8)举例:以「你a」为例 (7)UTF-8 的编码规则很简单,只有二条:
-
11100100 10111101 10100000 01100001
- 读8位信息11100100
- 发现开头有3个1,说明这个字符有3个八位
- 于是再读两个8位信息10111101 10100000
- 前面的10不要,其他合起来,得01001111 01100000
- 这就还原为Unicode的你了:00000000 01001111 01100000
- 再读8位信息01100001
- 发现开头是0,说明这个字符只占8位
- 这就还原味Unicode的a了:000000000000000001100001
问题
最后都是都是存数字0101010101,计算机咋知道你存的是数字的010101还是字符的01010101
答:计算机不知道。需要我们用一些辅助方式提醒计算机,比如加后缀(.txt就是存字符的编码,Excel就是存数字的数字)