Python基础之进制及编码

Python基础之进制及编码


了解计算机中必备的常识知识及常见名词背后的含义。

概要:

  • python代码的运行方式
  • 进制
  • 计算机中的单位
  • 编码

1. Python代码的运行方式

  • 脚本式
python3 - /PycharmProjects/day03/6.作业题讲解.py
  • 交互式
python

2. 进制

  • 二级制
#逢二进一
二进制:十进制
0:0 
1:1
10:2
11:3
100:4
101:5
110:6
111:
1000:
  • 六进制
  • 十进制
  • 八进制
  • 十六进制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a6nP8YiG-1669560611782)(E:\Python\笔记\assets\image-20221127112042383.png)]

2.1 进制转换

image-20221127113219547
  • 在Python 中10进制以整型数据的形式存在
  • 2、8、16进制以字符串的形式存在
  • 2进制与8进制不能直接转换
十进制转换为二进制、
v = bin(23)
print(v)
#0b10
十进制转换为8进制
v1 = oct(36)
print(v1)
#0o44
十进制转换为16进制
v2 = hex(100)
print(v2)
#0x64
#二进制转换为十进制
d1 = int("0b10",base = 2)
print(d1)
#2

#八进制转换为十进制
d2 = int("0o44",base = 8)
print(d2)
# 36
#16进制转换为10进制
d3 = int("0x64",base = 16)
print(d3)
#100

3. 计算机中的单位

由于计算机中本质上所有的东西以为二进制存储和操作的,为了方便对于二进制值大小的表示,所以就搞了一些单位。

  • b(bit),位
1 ,113,21473....
  • B (Byte),字节
8位是一个字节。
1100 1011 ,一个字节
1010 1000 1100 1001 ,两个字节
  • K (kilobyte),千字节
1024B=1K
1K = 1024B*8b
  • M (megabyte) ,兆字节
1024KB=1M
1M=1024K=1024*1024B=1024*1024*8bit
  • G (Gigabyte),吉字节/千兆
1024M=1G
  • T( Trillionbyte)万亿字节/太字节
1TB=1024GB
  • 其他还有:
    • 1PB( Petabyte,千万亿字节,拍字节)=1024TB
    • 1EB( Exabyte,百亿亿字节,艾字节)=1024PB
    • 1ZB(Zettabyte,十万亿亿字节,泽字节)=1024EB
    • 1YB( Yottabyte,一亿亿亿字节,尧字节)=1024ZB
    • 1BB( Brontobyte,千亿亿亿字节)=1024YB

练习

#假设1个汉字需要2个字节(2B=16位来表示,如:1000101011001100),那么1G流量可以通过网络传输多少汉字呢?(计算机传输本质上也是二进制)
1G = 1024M=1024*1024k=1024*1024*1024B=1073741824B
即536870912个汉字

#假设1个汉字需要2个字节(2B=16位来表示,如:1000101011001100),那么500G硬盘可以存储多少个汉字?
536870912*500=268435456000

4. 编码

编码,文字和二进制之间的一个对照表。

4.1 ASCII编码

ASCII规定使用一个字节来表示字母与二进制的对应关系。

00000000
00000001
00000010
........
11111111
2**8=256
  • ASCII表

在这里插入图片描述
在这里插入图片描述

官方网址:https://www.ASCIItable.com/

4.2 gb-2312编码

  • gb-2312编码,由国家信息标准委员会制作(1980年)。
  • gbk编码,对gb2312进行扩展,包含了中日韩等文字(1995年)。

与二进制的对应关系中具有如下逻辑

  • 单字节表示,用一个字节表示对应关系。英文2**8=256。
  • 双字节表示,用两个字节表示对应关系。中文汉字2**16=65536。

4.3 Unicode

Unicode也被称为万国码,为全球的每个文字都分配了一个码位(二进制表示)。

  • Ucs2
用固定的两个字节来表示一个字符
00000000 00000000

2**16= 65535
  • Ucs4
用固定的四个字节来表示一个字符

2**32=  4294967296

参考网址:https://home. Unicode.org/

https:// Unicode-table.com/en/blocks/

  • 无论是Ucs2和ucs4都有缺点:浪费空间

    文字   十六进制     二进制
      A     0041     01000001                                  :ASCII
      A     0041     0o0000o0 01000001                         :Ucs2
      A     0041     0o000000000o000o 00000000 o1000001        :Ucs4
      
    #所以在文件存储或者网络传输时一般不会直接使用 Unicode。
    #而在内存中会使用 Unicode。
    

    4.4 UTF-8

    包含所有文字和二进制的对应关系,全球应用最为广泛的一种编码(站在巨人的肩膀上功成名就)本质上: UTF-8是对 Unicode的压缩,用尽量少的二进制去与文字进行对应。

 Unicode码位范围        UTF-8
oo00 ~ 0o7E          用1个字节表示
0080 ~ 07FE          用2个字节表示
0800 - FFFE          用3个字节表示
10000 ~ 10FFFF       用4个字节表示

压缩流程:

  • 第一步:选择转换模板
码位范围(十六进制)              转换模板
0000 ~ 007F                  0XXXXXXX
0080 ~07FF                   110XXXXX 10XXXXXX
0800 - FFFE                  1110XXXX 10XXXXXX 10XXXXXX
10000 ~ 1OFEFF               11110XXX 10XXXXXX 10XXXXXX 10XXXXXX

例如:
"B”对应的 Unicode码位为0042,那么他应该选择的一个模板。
"a”对应的 Unicode码位为01E3。则应该选择第二个模板。
“李”对应的 Unicode码位为674E,则应该选择第三个模板。
😁对应的 Unicode码位为1F601,则应该选择第四个模板。

注意:一般中文都使用第三个模板(3个字节),这也就是平时大家说中文在UTF-8中会占3个字节的原因了。

  • 第二部:在模板中填入数据
李->674E->110 011101 001110
根据模板去套入数据
1110XXXX 10XXXXXX 1OXXXXXX
1110XXXX 10XXXXXX 10001110
11100110 10011101 10001110
# 即,先转为二进制,而后根据几个×对应几位数,从后往前补充,不够补0

😁->1F601-> 11111 011000 000001

11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
11110XXX 10XXXXXX 10XXXXXX 10000001
11110XXX 10XXXXXX 10011000 10000001
11110XXX 10X11111 10011000 10000001
11110000 10011111 10011000 10000001

4.5 Python相关的编码

  • 字符串(str) Unicode处理
  • 字节(byte) UTF-8 or gbk编码
v1 = "李"
"李".encode("UTF-8")#P70
"李".encode("gbk")

将一个字符串写入到一个文件中。

name="一giao我里giao"
data=encode("UTF-8")
#打开一个文件
file_object = open ( "log.txt ",mode="wb" )
#在文件中写内容
file_object.write(data)
#关闭文件
file_object.close( )

总结

  1. ASCII编码、 Unicode字符集、UTF-8编码本质上都是字符与二进制的关系
    • ASCII,字符和二进制的对照表。
    • Unicode,字符和二进制(码位)的对照表。
    • UTF-8,对 Unicode字符集的码位进行压缩处理,间接也维护了字符和二进制的对照表。
  2. Ucs2和Ucs4指的是使用多少个字节来表示 Unicode字符集的码位。
  3. 目前最广泛的编码为: UTF-8,他可以表示所有的字符且存储或网络传输也不会浪费资源(对码位进行了压缩)。
  4. 二进制、八进制、十进制、十六进制其实就是进位不同。
  5. 基于Python实现二进制、八进制、十进制、十六进制之间的转换。
  6. 一个字节8位
  7. 计算机中常见单位之间的关系。
  8. 汉字,用gbk编码需要用2个字节;用UTF-8编码需要用3个字节。
  9. 基于Python实现将字符串转换为字节(UTF-8编码)
#字符串类型
name ="乔布斯"
#字符串转换为字节类型
data = name.encode("utf-8")
#把字节转换为字符串
data.decode("utf-8")

10.基于Python实现将字符串转换为字节(gbk编码)

11.计算机中的所有数据都是以二进制的形式去执行和存储的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值