show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次学习了
- 减去
- minus
- 来自词根min-
- 正数 直接使用
- 数字的 二进制形式 存储在字节中
- 想要查看 负数 存储形式的时候
- 爆出了错误
- OverflowError
- 溢出错误
- 爆出了错误
- 负数 是
怎么
用 二进制形式- 存储在字节中的 呢?🤪
- 查帮助
- 由于i_difference类型是 int
help(int.to_bytes)
- 查询 int 类 to_bytes 函数的帮助手册
- 第一个参数是长度
- 说明要用几个字节
- 1、2还是4
- 如果数字 超过 字节的表示范围
- 就会显示溢出
- 什么是 溢出(overflow) 呢?
- 由于容器的 容积有限
- 如果 注入的液体 超过 容器容积
- 就会发生溢出
-
这时候 存上的
- 就不是当时 给的值了
-
甚至发生错误
- OverflowError
- 256 就超过 了
- 一个字节 的 容积
- 无法将其存储进字节
- 第二个参数是字节序
- 要选 big 还是 little
- big 就是大端字节序
- little 就是小端字节序
- 函数第3个参数
- 意味着 是否可以
- 有符号
- 意味着 是否可以
- 有符号 signed = True
- 就可以 表示负数
- 给函数不同的参数
- 函数 给我们返回 不同结果
- 看起来确实是
- 可以得到-1 的二进制形式了
- 这个字节
- 怎么表示正负呢?
- 而且这个 to_bytes 每次都要输入"big"或者"little"
- 有点麻烦啊
- 有什么简单方法吗?
- 首先引入 struct 这个 module
- 看一下这个函数 pack
- 把数字打包成字节
- 我们可以看到
- 这个数字存储
- 其实用的是 小端序
- little-endian
- 不过两个字节毕竟还是多
- 我可以简化成
- 1 个字节么?
help(struct.pack)
- 更多细节还得help
- struct 这个 module
help(struct)
- 可以看到
<>
可以区分 大小端字节序
- 还可以看到具体的数据类型
- h
- signed short
- 有符号 2字节
- signed short
- B
- unsigned char
- 无符号 1字节
- unsigned char
- b
- signed char
- 有符号 1字节
- signed char
- h
- 要找的应该是b
- 有符号1字节
- 尝试打包
- 可以列出所有 打包格式吗?
- python的打包类型 和 C语言 是一一对应的
- 看不到具体的类型名
- 是因为 python 封装得比较好
- 但内部肯定还是这些东西
- 看不到具体的类型名
- 有封装(pack)就有解封(unpack)
- 有打包就有解包
- 就像有加就有减一样
- 去 struct 查找一下
- 这次学习了
- 负数在计算机中 存储方法
- 数字
- 可以 用 struct.pack
- 打包 成字节状态
- 也可以 struct.unpack
- 解包 回整数形式
- 可以 用 struct.pack
- 不过
为什么
偏偏 要用- 二进制字节 b'\xff' 来表示 -1 呢?🤔
- 别的形式 不行吗?
- 下次再说 👋