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

为什么Numpy布尔数组执行~b.sum()运算会得到负数结果?

问题底层原因说明

出现该差异的核心原因是运算符优先级不同,具体逻辑拆解如下:

  • 首先Python语法中,方法调用(即.sum()这类语法)的优先级远高于一元按位非运算符~,因此~b.sum()的执行顺序和你预期的完全不同:
    1. 第一步优先执行b.sum(),布尔数组求和得到整数结果1
    2. 第二步才对整数1执行按位非运算~1,而非你预期的“先对数组做按位非再求和”
  • 整数的按位非运算规则:Python的整数采用补码方式存储,按位非~会对整数的所有二进制位取反,对应的数学计算规则为 ~x = -x -1
    代入第一步得到的结果x=1,可得 ~1 = -1 -1 = -2,和你得到的运行结果完全一致

对比验证

你预期的运算逻辑需要手动加括号改变运算优先级,对应代码为(~b).sum(),才能先对数组做按位非得到3个True,再求和得到结果3。

# 无括号的实际执行逻辑等价代码
step1 = b.sum() # 返回整数 1
step2 = ~step1 # 返回整数 -2
print(step2 == ~b.sum()) # 输出 True

# 符合你预期的逻辑需要手动加括号
print((~b).sum()) # 输出 3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:54:00