You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:18:15