np.invert 和 np.binary_repr 详解

invert 的作用是对数值按位取反,但是对于具体的情况有点差别,看下面几个例子就能明白。

对于正数 13,其对应的二进制位是:00001101,如果按位取反,结果为 11110010 对应的整数是:-14。

二进制位,可以用numpy的 np.binary_repr 函数实现:

可是设置不同的位数:

-14是怎么来的呢?计算机中,最高位是符号位。11110010的最高位是1,代表负数。而负数在计算机中是负数按照补码来进行存储的。

我们可以这么说,对于负数才有相应的补码。

补码的计算方式:补码 = 反码 + 1。

而我们最终的目的是要得到原码,也就是反码的反码。

对于补码 11110010,我们先求的反码,为反码 = 补码 - 1 = 11110001

然后求取,原码:原码是反码的反码,但是符号位不变: 原码 = 10001110 对饮过来就是 -14 啦。

测试结果:

但是对于无符号整数,我们对正数求求反码时,不改变符号位:所以 00001101的反码为 11110010 最高位默认强制为0,按位取反后还是正数,对应是 242。

对于更大的比特位,有符号正数不变,但是无符号整数 结果会变化。看下面两个例子。

16位有符号整数

16位无符号整数(计算过程同uint8)

 对于 bool行数据,就直接取反即可。

参考:https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.invert.html 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值