Python对字符串执行<<左移运算报TypeError如何解决
报错触发原因
- 类型不匹配:
bin(num)的返回值是带0b前缀的二进制字符串,执行[2:]切片后得到的依然是普通字符串类型,而左移运算符<<仅支持整数类型之间的运算,直接对字符串和整数count执行左移操作,就会抛出你看到的TypeError: unsupported operand type(s) for <<: 'str' and 'int'错误。 - 逻辑误用:左移运算符的作用是将整数的二进制位整体左移指定位数、低位补0,等价于对整数做乘2的N次方运算,本身就没有「截取前N位比特」的功能,就算修正了类型问题,也实现不了预期效果。
代码修改方案
根据你需要的返回值类型,选择对应实现即可:
方案1:返回整数类型的前N位比特结果
通过位运算实现,执行效率更高:
def firstBits(num, count): total_bits = num.bit_length() # 入参合法性校验,避免非法count导致结果异常 if not 1 <= count <= total_bits: raise ValueError(f"count取值必须为1到{total_bits}之间的整数") # 右移丢弃低位的(总比特长度 - count)位,剩余值就是前count位比特对应的整数 return num >> (total_bits - count)
示例:传入num=26(二进制为11010,总比特长度5)、count=3,返回整数6,对应二进制110,即目标前3位比特的整数结果。
方案2:返回字符串类型的前N位比特
直接对转换后的二进制字符串做切片,逻辑更直观:
def firstBits(num, count): bin_str = bin(num)[2:] if not 1 <= count <= len(bin_str): raise ValueError(f"count取值必须为1到{len(bin_str)}之间的整数") return bin_str[:count]
示例:传入num=26、count=3,返回字符串'110'。
内容的提问来源于stack exchange,提问作者Sachs
相关产品推荐
相关产品推荐

