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

Python中&运算符正确应用:16位模式匹配异常排查

问题分析与解决

核心问题原因

你的代码逻辑本身没有错误,但对需求的实现方式和二进制位的对应关系理解有偏差:

  1. 二进制字符串转整数时,字符串左侧是整数的最高位,右侧是最低位。因此64位字符串的最后16个字符,对应整数的最低16位(20到215)。
  2. 你使用的掩码0x3200(二进制0b0011001000000000)的作用是:检测整数中对应掩码为1的位是否都为1。而str1的最后16位是0011001000100010,恰好满足掩码指定的位(第9、12、13位)都为1,因此第一个条件成立并打印,这是符合按位与逻辑的结果,你的预期有误。

正确实现方式

如果你的需求是检测最后16位完全匹配0b0011001000000000(即等于0x3200),需要先提取整数的最低16位,再直接比较,而不是用掩码判断部分位:

普通Python代码修正

str1 = '0001111000000000000001110001101000000001010111010011001000100010'
str2 = '0111000000000000000001110001101011111111111100000011001000000000'

num1 = int(str1,2)
num2 = int(str2,2)

# 提取最低16位,再判断是否完全等于目标值
if (num1 & 0xFFFF) == 0x3200:  # 0xFFFF是16位全1掩码,用于提取最低16位
    print('I would expect no print')
if (num2 & 0xFFFF) == 0x3200:
    print('I should be printed')

Pandas代码修正

同样先提取最低16位再比较:

df2 = df.loc[(df['Telegram_Header'].apply(int, args=(2,)) & 0xFFFF).eq(0x3200)]

按位与&的正确用法补充

按位与&的核心作用是保留指定位的值:

  • 掩码中为1的位,会保留原数对应位的值;掩码中为0的位,会将原数对应位清零。
  • 若要判断原数中某几位是否全为1,就用原数&掩码,若结果等于掩码,则说明这些位全为1。比如你原来的代码就是这个逻辑,只是不符合你“完全匹配最后16位”的需求。

内容的提问来源于stack exchange,提问作者Phil94

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:25:43