1.进制
计算机底层都是0101的形式存在
- 二进制
2 进 1 - 八进制
8 进 1 - 十进制
10 进 1 - 十八进制
16 进 1
进制有多种表现形式,可以相互转换
1.1在python中的进制转换
1.2 进制之间的转换
十进制转化为其他进制
v1 = bin(25) #十进制转化为二进制
v2 = oct(25) #十进制转化为八进制
v3 = hex(25)#十进制转化为十六进制
0b==>二进制
0o==>八进制
0x==>十六进制
# 都是以字符串形式存在
其他进制转化为十进制
int("0b1101",base=2)
int("0o27",base=8)
int("0x1e",base=16)
2.计算机中的单位
- bit,位
- B(byte),字节
8位是一个字节
10010110 一个字节
10010110 10010110 两个字节
- KB(kilobyte),千字节
1024个字节 = 1KB
- M,兆
1024KB = 1M
- G,千兆
1G = 1024M
- T,万亿字节
1T = 1024G
假设一个汉字需要2个字符(2B = 16位来表示,如:1000101011001100),那么1G流量可以通过网络传输多少文字呢?
3. 编码
编码、文字和二进制之间的一个对照表
3.1 ASCII编码
ASCII规定使用1个字节来表示字母与二进制之间的关系
00000000
00000001
........
11111111
一共2**8 = 256种
如果程序用了ASCII编码,那么意味着程序中只能出现英文
3.2 gb-2313编码
迭代后有了gbk编码,包含中日韩等亚洲文字
在与二进制对应关系时,有如下逻辑:
- 单字节表示,用一个字节表示对应关系–向下兼容ascii 2**8 = 256
- 双字节表示,用两个字节表示对应关系 2**16 = 65536
3.3 Unicode
Unicode被称为万国码,为全球文字都分配了一个码位
- usc2
用固定的两个字节去表示一个文字
00000000 00000000 我
........ ........
2**16 = 65535
- ucs4
用固定的四个字节去表示一个文字
........ ........ ........ ........ 我
2**32 = 4294967296
缺点:ucs2和usc4都太浪费空间,所以在文件存储和网络传输时,不会直接使用Unicode;而在内存中会使用Unicode(固定字节,好断句)
3.4 utf-8
是对Unicode的压缩,用尽量少的二进制去与文字进行对应
中文一般占三个字节
python相关的编码
字符串(str) "你好" unicode处理 一般在内存
字节(byte) "ahdkgkjfgkshaf" utf-8 or gbk编码 一般用于文本或者网络处理
v1 = '我'
v2 = '我'.encode("utf-8")
v2 = '我'.encode("gbk")