第一节 Python进制转换

本文介绍了二进制、八进制和十六进制之间的转换方法,包括Python内置函数bin(),oct(),hex()的使用。文章通过示例详细解释了如何计算不同进制数值的位数,并涉及到了九进制转十进制的问题。此外,还探讨了Excel中列名与26进制的关系以及ASCII码的相关知识,如ord()和chr()函数的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、二进制 bin(num) 、 {:b}

(1)题目:二进制位数

(2)题目:二进制表示

(3)题目: 九进制转十进制

二、八进制 oct(num) 、{:o} 、 %o

三、十六进制 hex(num)、{:x}、%x

四、其余情况

题目:构思一个26进制对应26个字母。

五、ASCII码相关 ord() chr()


一、二进制 bin(num) 、 {:b}

# 十进制与二进制
d = 5
print(bin(5)) #"0b101"
# format 的{}种:后面带填充的字符。
print("{:b}".format(5)) #101
# 将当前二进制数据,转为整型
int("0b101",base=2) # 5

手算:

十进制—>二进制,除2取余倒排列

二进制---->十进制,只需加权求和

(1)题目:二进制位数

十进制整数 2 在十进制中是 1 位数,在二进制中对应 10 ,是 2 位数。 十进制整数 22 在十进制中是 2 位数,在二进制中对应 10110 ,是 5 位数。 请问十进制整数 2022 在二进制中是几位数?

# bin(2022) 0b11111100110  
# -2是去掉0b的长度
print(len(bin(2022))-2)

(2)题目:二进制表示

难度: 简单 标签: 填空题, 2021, 模拟赛

小明要用二进制来表示 1 到 10000 的所有整数,要求不同的整数用不同的二进制数表示,请问,为了表示 1 到 10000的所有整数,至少需要多少个二进制位?

print(len(bin(10000))-2)

(3)题目: 九进制转十进制

难度: 简单 标签: 2022, 省赛

九进制正整数 (2022)9 转换成十进制等于多少?

print(2*(9*9*9) + 2*(9) + 2)

二、八进制 oct(num) 、{:o} 、 %o

# 十进制与八进制(1-7)
d = 8
oct(d)
#0o10
print("{:o}".format(8)) #10
print(f"%o"%(8))        #10
int("0o10",base=8)

三、十六进制 hex(num)、{:x}、%x

# 十进制与十六进制(1-9,a-f)
d = 17
hex(d) #'0x11'
print("{:x}".format(17)) #11
print(f"%x"%(17))        #11
int("0x11",base=16)  #十六进制转十进制,加权求和
#1*16^1 + 1*16^0

四、其余情况

题目:构思一个26进制对应26个字母。

题目: 列名  www.lanqiao.cn/problems/2407/learning/

难度: 简单 标签: 省模拟赛, 2023

题目描述

在 Excel 中,列的名称使用英文字母的组合。前 26 列用一个字母,依次为 A 到 Z,接下来 26×26 列使用两个字母的组合,依次为 AA 到 ZZ 。

请问第 2022列的名称是什么?

解析

如果以2个字母的组合为列名,最多为26x26=676个列,所以2022列就是以三个字母的组合去得到的,其实简单一点这道题也可以进行简单的手算,但是仔细一看,实际上就是2022转成26进制即可,但是这个26进制没有数字,是从A~Z。

其实这道题,我们也可以列一个数组,穷举把所有数算出来,然后取对应位置2022的数据出来就好了,这两种方法都OK的。

def to_base_26(num):
    if num == 0:
        return 'A' # 如果为0   
    letters = []
    while num > 0:
        num, rem = divmod(num, 26)
        letters.append(chr(ord('A') + rem - 1)) 
    return ''.join(reversed(letters)) # 进行翻转
print(to_base_26(2022))

五、ASCII码相关 ord() chr()

print("'a'={},'A'={}".format(ord('a'),ord('A')))
# 'a'=97,'A'=65
​
print(chr(97 + 1))  # b

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值