1、什么是进制
- 进制是一种计数方式,最常见的有:
- 二进制(binary):用0和1表示
- 八进制(octal):用0-7表示
- 十进制(decimal):用0-9表示
- 十六进制(hexadecimal):用0-9和A-F表示
2、进制之间的关系
2.1、二进制是基础:
# 13的二进制表示:1101
1*2³ + 1*2² + 0*2¹ + 1*2⁰
= 8 + 4 + 0 + 1
= 131
2.2、八进制与二进制:
每3位二进制对应1位八进制
二进制:110 111 100
八进制: 6 7 4
2.3 十六进制与二进制:
每4位二进制对应1位十六进制
二进制:0011 1100
十六进制: 3 C
3、为什么需要进制
1、二进制的用途:
- 计算机硬件层面的实现(高低电平)
- 位运算
- 数据存储的基本单位
2、八进制的用途:
- Unix/Linux文件权限
- 某些特殊场景的数据表示
3、十六进制的用途:
- 颜色代码(如:#FF0000 表示红色)
- 内存地址
- 二进制数据的简洁表示
4、不同进制的字面量
decimal=60 #十进制
binary=0b111100 #二进制
octal=0o74 #八进制
hexa=0x3c #十六进制
4,1、快速记忆方法:
1、进制前缀:
- 二进制:0b (Binary)
- 八进制:0o (Octal)
- 十六进制:0x (Hex)
2、转换函数:
- 记住三个函数:bin(), oct(), hex()
- 都是转换为字符串形式
- 都带有相应的前缀
"""
进制详解与应用
作用:深入理解各种进制的原理、转换和实际应用
"""
def number_system_basic():
print("1. 进制基础概念演示")
print("-" * 50)
print("1.1 什么是进制?")
print("-" * 30)
# 进制就是进位计数制,是人类用来表示数字的一种方式
# 比如十进制每位可以用0-9表示,逢十进一
# 二进制每位可以用0-1表示,逢二进一
# 以十进制数 13 为例,展示不同进制的表示方法
decimal = 13
print(f"十进制数 13 的本质是:")
print(f"1 * 10^1 + 3 * 10^0 = {1 * 10**1} + {3 * 10**0} = 13")
# 二进制 1101 的计算过程
binary = "1101"
binary_value = int(binary, 2)
print(f"\n二进制数 1101 的本质是:")
print(f"1*2^3 + 1*2^2 + 0*2^1 + 1*2^0")
print(f"= {1*2**3} + {1*2**2} + {0*2**1} + {1*2**0}")
print(f"= {binary_value}")
print("\n1.2 常见进制对照表(以13为例):")
print("-" * 30)
num = 13
print(f"十进制:{num}")
print(f"二进制:{bin(num)} ({bin(num)[2:]})")
print(f"八进制:{oct(num)} ({oct(num)[2:]})")
print(f"十六进制:{hex(num)} ({hex(num)[2:]})")
def binary_explanation():
print("\n2. 二进制详解")
print("-" * 50)
print("2.1 为什么要使用二进制?")
print("-" * 30)
print("1) 计算机内部使用电路表示数据,高电平和低电平正好对应1和0")
print("2) 二进制运算规则简单,容易用电路实现")
print("3) 实际应用:文件存储、网络传输、位运算等")
print("\n2.2 二进制转换演示:")
print("-" * 30)
# 十进制转二进制的过程:除2取余,逆序排列
num = 13
print(f"将十进制 {num} 转换为二进制的过程:")
print("13 ÷ 2 = 6 余 1")
print(" 6 ÷ 2 = 3 余 0")
print(" 3 ÷ 2 = 1 余 1")
print(" 1 ÷ 2 = 0 余 1")
print("从下往上读余数:1101")
# 二进制转十进制的过程
binary = "1101"
print(f"\n将二进制 {binary} 转换为十进制的过程:")
print("1*2^3 + 1*2^2 + 0*2^1 + 1*2^0")
print(f"= {1*2**3} + {1*2**2} + {0*2**1} + {1*2**0}")
print(f"= {int(binary, 2)}")
def octal_hexadecimal_explanation():
print("\n3. 八进制和十六进制")
print("-" * 50)
print("3.1 为什么需要八进制和十六进制?")
print("-" * 30)
print("1) 二进制太长,不便于人类阅读和记忆")
print("2) 八进制和十六进制可以更简洁地表示二进制")
print("3) 每3位二进制对应1位八进制")
print("4) 每4位二进制对应1位十六进制")
num = 60
print(f"\n以数字{num}为例:")
print(f"二进制: {bin(num)[2:]:0>8}") # 00111100
print(f"八进制: {oct(num)[2:]:>8}") # 74
print(f"十六进制:{hex(num)[2:]:>8}") # 3c
print("\n3.2 进制转换关系:")
print("-" * 30)
binary = "00111100"
print(f"二进制数 {binary}")
print("转八进制:每3位一组 001 111 100 → 174")
print("转十六进制:每4位一组 0011 1100 → 3C")
def practical_applications():
print("\n4. 实际应用示例")
print("-" * 50)
print("4.1 颜色表示:")
print("-" * 30)
# RGB颜色使用十六进制表示
red = 255
green = 128
blue = 0
print(
f"RGB({red},{green},{blue}) = #{red:02X}{green:02X}{blue:02X}" # 02X表示用2位十六进制表示,不足2位前面补0,X表示十六进制
)
print("\n4.2 权限表示:")
print("-" * 30)
# Linux文件权限使用八进制表示
permission = 0o755 # rwxr-xr-x
print(f"权限 {oct(permission)} 表示:")
# 0>9
# 这是一个格式化说明符,用于在 f-string 中指定如何格式化字符串。
# 0> 表示使用 0 作为填充字符,并且对齐方式为右对齐(即在左边填充)。
# 9 表示最终输出的字符串长度应为9个字符。如果原字符串长度不足9个字符,则在其左侧填充 0 直到满足长度要求。
print(f"二进制:{bin(permission)[2:]:0>9}")
print("r(读)=4, w(写)=2, x(执行)=1")
print("所有者:rwx = 7")
print("用户组:r-x = 5")
print("其他人:r-x = 5")
print("\n4.3 位运算应用:")
print("-" * 30)
# 使用位运算进行标志位操作
flags = 0b1010 # 初始标志位
mask = 0b0100 # 要设置的位
# 设置标志位
flags |= (
mask # |= 表示按位或运算,将 flags 和 mask 进行按位或运算,结果赋值给 flags
)
print(f"设置标志位后:{bin(flags)[2:]:0>4}")
# 清除标志位
flags &= (
~mask
) # &= 表示按位与运算,将 flags 和 ~mask 进行按位与运算,结果赋值给 flags,~mask 表示 mask 的按位取反
print(f"清除标志位后:{bin(flags)[2:]:0>4}")
# 检查标志位
is_set = bool(
flags & mask
) # & 表示按位与运算,将 flags 和 mask 进行按位与运算,结果赋值给 is_set
print(f"检查标志位是否设置:{is_set}")
def memory_tips():
print("\n5. 快速记忆方法")
print("-" * 50)
print("5.1 进制转换口诀:")
print("-" * 30)
print("1) 二进制到八进制:三位一组看")
print("2) 二进制到十六进制:四位一组算")
print("3) 十进制转二进制:除二取余,倒着写")
print("\n5.2 十六进制对照表:")
print("-" * 30)
print("0-9保持不变")
print("10-15用A-F表示")
print("例如:A=10, B=11, C=12, D=13, E=14, F=15")
print("\n5.3 实用技巧:")
print("-" * 30)
print("1) 2的幂次:")
for i in range(5):
print(f"2^{i} = {2**i}")
print("\n2) 常用十六进制值:")
print("FF = 255(一个字节的最大值)")
print("80 = 128(一个字节的一半)")
# 运行所有示例
if __name__ == "__main__":
number_system_basic()
binary_explanation()
octal_hexadecimal_explanation()
practical_applications()
memory_tips()
结果展示:
1. 进制基础概念演示
--------------------------------------------------
1.1 什么是进制?
------------------------------
十进制数 13 的本质是:
1 * 10^1 + 3 * 10^0 = 10 + 3 = 13
二进制数 1101 的本质是:
1*2^3 + 1*2^2 + 0*2^1 + 1*2^0
= 8 + 4 + 0 + 1
= 13
1.2 常见进制对照表(以13为例):
------------------------------
十进制:13
二进制:0b1101 (1101)
八进制:0o15 (15)
十六进制:0xd (d)
2. 二进制详解
--------------------------------------------------
2.1 为什么要使用二进制?
------------------------------
1) 计算机内部使用电路表示数据,高电平和低电平正好对应1和0
2) 二进制运算规则简单,容易用电路实现
3) 实际应用:文件存储、网络传输、位运算等
2.2 二进制转换演示:
------------------------------
将十进制 13 转换为二进制的过程:
13 ÷ 2 = 6 余 1
6 ÷ 2 = 3 余 0
3 ÷ 2 = 1 余 1
1 ÷ 2 = 0 余 1
从下往上读余数:1101
将二进制 1101 转换为十进制的过程:
1*2^3 + 1*2^2 + 0*2^1 + 1*2^0
= 8 + 4 + 0 + 1
= 13
3. 八进制和十六进制
--------------------------------------------------
3.1 为什么需要八进制和十六进制?
------------------------------
1) 二进制太长,不便于人类阅读和记忆
2) 八进制和十六进制可以更简洁地表示二进制
3) 每3位二进制对应1位八进制
4) 每4位二进制对应1位十六进制
以数字60为例:
二进制: 00111100
八进制: 74
十六进制: 3c
3.2 进制转换关系:
------------------------------
二进制数 00111100
转八进制:每3位一组 001 111 100 → 174
转十六进制:每4位一组 0011 1100 → 3C
4. 实际应用示例
--------------------------------------------------
4.1 颜色表示:
------------------------------
RGB(255,128,0) = #FF8000
4.2 权限表示:
------------------------------
权限 0o755 表示:
二进制:111101101
r(读)=4, w(写)=2, x(执行)=1
所有者:rwx = 7
用户组:r-x = 5
其他人:r-x = 5
4.3 位运算应用:
------------------------------
设置标志位后:1110
清除标志位后:1010
检查标志位是否设置:False
5. 快速记忆方法
--------------------------------------------------
5.1 进制转换口诀:
------------------------------
1) 二进制到八进制:三位一组看
2) 二进制到十六进制:四位一组算
3) 十进制转二进制:除二取余,倒着写
5.2 十六进制对照表:
------------------------------
0-9保持不变
10-15用A-F表示
例如:A=10, B=11, C=12, D=13, E=14, F=15
5.3 实用技巧:
------------------------------
1) 2的幂次:
2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2) 常用十六进制值:
FF = 255(一个字节的最大值)
80 = 128(一个字节的一半)