13 解析进制

1、什么是进制

  1. 进制是一种计数方式,最常见的有:
  2. 二进制(binary):用0和1表示
  3. 八进制(octal):用0-7表示
  4. 十进制(decimal):用0-9表示
  5. 十六进制(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(一个字节的一半)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值