十进制转任意进制函数中mask的含义与必要性解析
十进制转任意进制函数中mask的作用解释
先看你给出的代码:
def getMask(): mask ="" for i in range(48,58): mask += chr(i) for i in range(65,91): mask += chr(i) return mask mask = getMask() print(mask) def decToAny(val, system): temp = "" while val >0: temp += mask[val%system] val //= system return reverseVal(temp) print(decToAny(10,2))
一、mask到底是什么?
你可以把它看成一张符号对照表:
- 第一部分
range(48,58)对应ASCII码里的0-9,chr(i)把这些ASCII码转成字符,拼接后是"0123456789"; - 第二部分
range(65,91)对应ASCII码里的A-Z,转成字符后拼接成"ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - 最终mask就是
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",总共36个字符,每个位置对应一个进制位的符号。
二、为什么需要mask?
我们平时用的十进制,每一位只用0-9就能表示,但如果转成大于10的进制(比如16进制、36进制),就会出现比9大的"数位数字"——比如16进制里的10要写成A,11写成B,直到15写成F。
这个时候直接用数字没法表示这些"超9"的数位,就需要用字母来代替。mask的作用就是:当你计算出当前位的余数(比如10),直接去mask里找对应索引的字符(mask[10]就是"A"),就能把数字转换成对应进制的符号。
举个例子:把十进制的15转成16进制,计算15%16=15,取mask[15]就是"F",这就是16进制里的正确符号。
如果没有mask,你就得写一堆判断:余数是10输出A,11输出B……代码会变得非常繁琐,而用mask只需要一行索引取值就能搞定,简洁又高效。
内容的提问来源于stack exchange,提问作者suer231232131133
相关产品推荐
相关产品推荐

