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

numpy.invert函数异常行为疑问:int8类型0取反为何得-1而非0?

为什么np.invert(np.array([0], dtype=np.int8))返回[-1]而非[0]

问题核心

你的代码:

import numpy as np
a = np.array([0], dtype=np.int8)
print(np.invert(a))

输出是[-1],这是因为**np.invert是按位取反操作,而非直接取“数值的补码”**,核心在于理解有符号整数的补码存储规则。

逐步骤分析

  1. int8类型的二进制表示
    dtype=np.int8是8位有符号整数,0的二进制存储为00000000(最高位为符号位,0代表正数)。

  2. 按位取反的操作逻辑
    np.invert会逐位翻转所有比特,00000000取反后得到11111111。

  3. 补码系统中11111111的十进制转换
    在补码规则下:

    • 最高位为1表示该数是负数
    • 负数的十进制值需通过“补码减1后取反”计算:11111111减1得11111110,取反后为00000001(对应十进制1),加上负号后就是-1。

文档表述的澄清

旧版numpy文档的描述易引发误解,新版文档说明“在补码系统中,该操作会翻转所有比特位,得到的结果对应输入值取负后加1的表示”,但更准确的理解应为**“结果对应(输入值加1)取负的表示”**:

  • 输入值为0时,0+1=1,取负后就是-1,与实际输出完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:10:01