Python基础教程第一章—P03二进制八进制十六进制及转换
P03二进制八进制十六进制及转换
进制
二进制 八进制 十进制 十六进制
二进制是什么?
'''
由 0 和 1 组成的数
先列出一个式子
例如 : 0010, 0001
其中python 以 0b 开头书写二进制格式
例如:0b0010 0b0001
使用函数 bin(整数) 可以将整数 转换为二进制数 (这里的整数为十进制)
'''
print(bin(10))
八进制是什么?
'''
由 0 - 7组成的数
例如: 127, 25
其中python 以 0o 开头书写八进制格式 注意第一个是数字0 第二个是字母0
例如 0o12 0o66 0o127
使用函数 oct(整数) 可以将整数转换为八进制数 (这里的整数为十进制)
'''
print(oct(10))
十进制是什么?
'''
由 0 - 9组成的数
例如: 127, 129
其中python 十进制无特殊标识
'''
print(int(127))
十六进制是什么?
'''
由 0 - 15组成的数
但是需要注意,10 - 15 在界面上显示无法映射规律容易造成字面不清晰,通过英文a - f 表示
例如 如果是 110 无法分离是 1 10 还是 1 1 0 还是 11 0 等组合
所以映射字符与数字规律为
a 为 10
b 为 11
c 为 12
d 为 13
e 为 14
f 为 15
不区分大小写
'''
# 例如: 20a, 3f
'''
其中python 以0x 开头书写十六进制数
例如 0x20a 0X3f
使用函数hex(整数) 可以将整数转换为十六进制数 (这里的整数为十进制)
'''
print(hex(10))
进制转换—常见转换之二进制与十进制
二进制转十进制
一种常见的转换方法:按权展开求和 名称比较多 例如按权相加法,等等,见怪不怪
这是一种通用的计算方法,适用于各中进制转换为 10 进制的算法
也就是说,我们可以通过 这种方法
将二进制 八进制 十六进制 转换成十进制
小数点左边的部位,最低位的权值为0,上一位的权值为1,…,依次递增 例如
1111. 各个位上的权值从最低位到最高位 为 0 1 2 3
小数点右边的部位,最高位的权值为-1,下一位的权值为-2,…,依次递减
.1111 各个位上的权值从最高位到最低位 为 -1 -2 -3 -4
每一个位上的值乘上以本身进制为底数,位权值为幂数 之和
例如:1111 0010 . 101 = 1*2^7 + 1*2^6 + 1*2^5 + 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 0*2^0 + 1*2^-1 + 0*2^-2 + 1*2^-3
= 244 + 0.625
= 244.625
十进制转换成二进制
扫描二维码关注公众号,回复:
13479060 查看本文章
![](/qrcode.jpg)
我们知道十进制是每满10进一位
所以我们的十进制可以拆分为 个位数和其他位数 但是实际上我们可以如此拆分10进制的数,如下
1025
# 1025 为 10进制
# 可以拆分位 如下模式
# 首先 拆分个位 十位 百位 千位
1025 / 10 = 102......5 #个位
102 / 10 = 10 ......2 #十位
10 / 10 = 1 ......0 #百位
1 / 10 = 0 ......1 #千位
# 将余数从上至下从低到高位整合 起来即为 1025
# 如此拆分 对十进制的理解
# 例如 9 + 1 = 10 可以看到 个位数变成0 进一位在十位上 为1 即表示10
那么二进制就是每满2进一位
那么 10 在 二进制中怎么表现尼,我们知道 二进制由 0和1 表现
0 + 1 = 1 ---- 0000 0001
1 + 1 = 2 ---- 0000 0010 产生进位
2 + 1 = 3 ---- 0000 0011
3 + 1 = 4 ---- 0000 0100 产生进位
4 + 1 = 5 ---- 0000 0101
5 + 1 = 6 ---- 0000 0110 产生进位
6 + 1 = 7 ---- 0000 0111
7 + 1 = 8 ---- 0000 1000 产生进位
8 + 1 = 9 ---- 0000 1001
9 + 1 = 10 ---- 0000 1010 产生进位
10 + 1 = 11 ---- 0000 1011
模仿10进制 我们可以如此将十进制拆分二进制的数
1025 / 2 = 512 ...... 1
512 / 2 = 256 ...... 0
256 / 2 = 128 ...... 0
128 / 2 = 64 ...... 0
64 / 2 = 32 ...... 0
32 / 2 = 16 ...... 0
16 / 2 = 8 ...... 0
8 / 2 = 4 ...... 0
4 / 2 = 2 ...... 0
2 / 2 = 1 ...... 0
1 / 2 = 0 ...... 1
0 / 2 = 0 ...... 0
# 将余数从上至下从低到高位整合 起来即为 0100 0000 0001
# 来看看计算器对二进制的计算 结果是否一样
# 如此拆分 对于二进制的理解 例如 0001 + 0001 = 0010
# 可以理解为满2 便进位 原本最低位为1 在加上1 此时最低为变为 0 进一位 +1 没超过0 不用再进位 所以为 0010
进制转换—常见转换之十进制与八进制和十六进制
实际上依次类推的一个形式
八进制 和 十六进制 也可以是类似的方法
十进制 转换为 八进制
# 十进制:1025
# 十进制转换为八进制 进行拆分
1025 / 8 = 128 ...... 1
128 / 8 = 16 ...... 0
16 / 8 = 2 ...... 0
2 / 8 = 0 ...... 2
# 将余数从上至下从低到高位整合 起来即为 2001
# 如此拆分 对于二进制的理解 例如 7 + 1 = 10 这里的10 表示 八进制的结果
# 可以理解为满8 便进位 原本最低位为 7 此时 最低位 + 1 满8 上一位 0 + 1为1 最低位 进位后为0 结果为10
八进制转为十进制
我们使用通用的按权展开求和方法
例如将 八进制 2001 转换为 十进制
2 * 8^3 + 0 * 8^2 + 0 * 8^1 + 1 * 8^0
= 2 * 512 + 1 = 1025
例如将 八进制 7452 转换为 十进制
7 * 8^3 + 4 * 8^2 + 5 * 8^1 + 2 * 8^0
= 7 * 512 + 4 * 64 + 5 * 8 + 2
= 3882
除了以上还有
十进制转换为 十六进制
也是类似的道理
# 十进制:1025
1025 / 16 = 64 ...... 1
64 / 16 = 4 ...... 0
4 / 16 = 0 ...... 4
# 将余数从上至下从低到高位整合 起来即为 401
# 如此拆分 对于十六进制的理解 例如 15 + 1 = 10 这里的10 表示 十六进制的结果
# 可以理解为满16 便进位 原本最低位为 15 此时 最低位 + 1 满16 上一位 0 + 1 为 1 最低位 进位后为0 结果为10
十六进制转换为 十进制
也可以按照 按权展开求和方法
例如将 十六进制 401 转换为 十进制
4 * 16^2 + 0 * 16^1 + 1 * 16^0
= 4 * 256 + 1
= 1025
例如将 十六进制 3cf 转换为 十进制
3 * 16^2 + c * 16^1 + f * 16^0
= 3 * 16^2 + 12 * 16^1 + 15 * 16^0
= 3 * 256 + 12 * 16 + 15
= 975
以上是针对 十进制和各个进制间的转换
进制转换—二进制与八进制和十六进制
我们应该理解 2^3 = 8 2^4 = 16
也就是说 实际上
2进制 三位一组为 8进制
2进制 四位一组为 16进制
例如将 010000000001 转换为 十六进制 或者是 八进制 那么转换的方法,就是对上方描述的规律的计算
转为八进制:
那么三个为一组 分为 010 000 000 001
快捷算法
010 为 2
000 为 0
001 为 1
结果为 2001
转为十六进制 :
那么四个为一组 分为 0100 0000 0001
快捷算法
0100 为 4
0000 为 0
0001 为 1
结果为 401
这里就需要介绍一下 8421码 也是有权码的一种
8421码又称为BCD码,是十进制代码中最常用的一种 。
在这种编码方式中,每一位二值代码的“1”都代表一个固定数值,
将每位“1”所代表的二进制数加起来就可以得到它所代表的十进制数字,
因为代码中从左至右看每一位“1”分别代表数字“8”“4”“2”“1”,故得名8421码。
其中每一位“1”代表的十进制数称为这一位的权。因为每位的权都是固定不变的,所以8421码是恒权码
这里列出了 2 的对应幂的数值 实际上不用过于多,8 个就足够,这里就多列了一些
2048 1024 512 256 128 64 32 16 8 4 2 1
这个时候让我们来使用一种更快的进制处理方式方法
举例 我们 将十进制 500 变为 二进制
首先 先看 500 在 512 内,小于 512 那么 256位置上存在 一个数
此时
256 < 500 < 512 那么权最大的第高位在256 位置上 即为 1 此时剩余值为 500-256 = 244
128 < 244 < 256 那么下一位 在 128 位置上 即为 1 此时剩余值为 244-128 = 116
64 < 116 < 128 那么下一位 在 64 位置上 即为 1 此时剩余值为 116 - 64 = 52
32 < 52 < 64 那么下一位 在 32 位置上 即为 1 此时剩余值为 52 - 32 = 20
16 < 20 < 32 那么下一位 在 16 位置上 即为 1 此时剩余值为 20 - 16 = 4
4 < 8 那么下一位 在 8 位置上 即为 0 此时剩余值为 4 不变
4 == 4 那么下一位 在 4 位置上 即为 1 此时剩余值为 4 - 4 = 0 结束
剩余补位 0
得到二进制数为 0001 1111 0100
尝试将十进制 700 转为二进制
512 < 700 < 1024 那么权最大的第高位在512 位置上 即为 1 此时剩余值为 700-512 = 188
188 < 256 那么下一位 在 256 位置上 即为 0 此时剩余值为 188 不变
128 < 188 < 256 那么下一位 在 128 位置上 即为 1 此时剩余值为 188-128 = 60
60 < 64 那么下一位 在 64 位置上 即为 0 此时剩余值为 60 不变
32 < 60 < 64 那么下一位 在 32 位置上 即为 1 此时剩余值为 60-32 = 28
16 < 28 < 32 那么下一位 在 16 位置上 即为 1 此时剩余值为 28-16 = 12
8 < 12 < 16 那么下一位 在 8 位置上 即为 1 此时剩余值为 12-8 = 4
4 = 4 < 8 那么下一位 在 4 位置上 即为 1 此时剩余值为 4-4 = 0 结束
剩余补位 0
得到二进制数为 0010 1011 1100
运用熟练后,
通过相同的道理将 二进制快速转换为 十进制
例如 0010 1011 1100
可得为 各个位上的 8421码 对应值相加
512 + 128 + 32 + 16 + 8 + 4 = 700
那通过8421码计算 二进制转换为 八进制操作
例如 001 010 111 100 1274
例如 111 110 100 764
那通过8421码计算 二进制转换为 十六进制操作
例如 0010 1011 1100 2bc
例如 0001 1111 0100 1f4
实际上各自的快速转换方式方法,都已经比较明确的
总结一下概念
二进制转八进制 可以通过 三位一组8421码计算 也可以转换为十进制在求余数计算
二进制转十进制 可以通过 8421码或者是通过 按权展开求和
二进制转十六进制 可以通过 四位一组8421码计算 也可以转换为十进制在求余数计算
八进制转二进制 可以通过一位三个2进制 8421计算 也可以转换为十进制在通过其他方式计算十六进制
八进制转十进制 可以通过按权展开求和计算 也可以通过8421计算
八进制转换十六进制 可以通过先转换为二进制在转换为十六进制 也可以通过转换为十进制在转换为十六进制
十进制转换二进制 可以通过 8421码 或者通过求余数计算
十进制转换八进制 可以通过 求余数计算 也可以通过8421码快速转换为二进制,在三位一组转成八进制
十进制转换十六进制 可以通过 求余数计算 也可以通过8421码快速转换为二进制,在四位一组转成十六进制
十六进制转换为二进制 可以通过一位4个2进制 8421码计算 或者转换为十进制在通过其他方式计算
十六进制转换为八进制 可以通过转换为 二进制在转换为八进制 或者转换为十进制在转换为八进制
十六进制转换为十进制 可以通过按权展开求和