python基础第一章-P03

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 查看本文章

我们知道十进制是每满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 在 二进制中怎么表现尼,我们知道 二进制由 01 表现
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     
快捷算法 
0102   
0000  
0011 
结果为 2001

转为十六进制 :
那么四个为一组 分为 0100 0000 0001    
快捷算法 
01004  
00000  
00011 
结果为 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  变为 二进制 
首先 先看 500512 内,小于 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码快速转换为二进制,在四位一组转成十六进制

十六进制转换为二进制 可以通过一位42进制 8421码计算 或者转换为十进制在通过其他方式计算
十六进制转换为八进制 可以通过转换为 二进制在转换为八进制 或者转换为十进制在转换为八进制
十六进制转换为十进制 可以通过按权展开求和

猜你喜欢

转载自blog.csdn.net/qq_42475194/article/details/121854161