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是按位取反操作,而非直接取“数值的补码”**,核心在于理解有符号整数的补码存储规则。
逐步骤分析
int8类型的二进制表示
dtype=np.int8是8位有符号整数,0的二进制存储为00000000(最高位为符号位,0代表正数)。按位取反的操作逻辑
np.invert会逐位翻转所有比特,00000000取反后得到11111111。补码系统中
11111111的十进制转换
在补码规则下:- 最高位为1表示该数是负数
- 负数的十进制值需通过“补码减1后取反”计算:
11111111减1得11111110,取反后为00000001(对应十进制1),加上负号后就是-1。
文档表述的澄清
旧版numpy文档的描述易引发误解,新版文档说明“在补码系统中,该操作会翻转所有比特位,得到的结果对应输入值取负后加1的表示”,但更准确的理解应为**“结果对应(输入值加1)取负的表示”**:
- 输入值为0时,0+1=1,取负后就是-1,与实际输出完全匹配。
内容的提问来源于stack exchange,提问作者JtTest
相关产品推荐
相关产品推荐

