目录
一、二进制 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