python 取反操作符(~)

误人子弟呀 误人子弟,看了几篇博客,真的是坑

~ : 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1

1、计算依据:

①正数的原码、反码、补码都是一样的
②负数的补码为符号位不变,剩余位取反再加1
③原码求补码: 取反,+1
④补码求原码: 取反,+1
⑤负数是以补码存储的
⑥取反操作是在原码上进行的
⑦符号位,1表示负数,0表示正数

2、例子
####################
~(-2)
首先你要知道 -2 在计算机里面的二进制形式,由⑤和②可知:
-2 原码:1000 0000 0000 0010
-2 反码:1111 1111 1111 1101 #符号位不变,各位求反
-2 补码:1111 1111 1111 1110 #补码 = 反码 + 1

1111 1111 1111 1110 就是-2在计算机里面的原型
现在开始对他求反,符号位不变,

按位取反: 0000 0000 0000 0001

很明显是一个正数,其原码为其本身,所以输出为1.

#################
~2
2 原码,反码,补码: 0000 0000 0000 0010

按位取反: 1111 1111 1111 1101

这是一个负数该怎么办?能直接求吗?
很显然是不行的,⑥说了:取反操作计算结果是在原码上进行的,⑤也说了:负数是以补码存储的
1111 1111 1111 1101 是 0000 0000 0000 0010 的反码,但我们想要的是结果,而不是在计算机里面的原型,
恰好,④补码求原码: 取反,+1
取反: 1000 0000 0000 0010
加 1: 1000 0000 0000 0011
于是,我们得到了原码,可以计算结果了
1000 0000 0000 0011 = -3

#################
总结,取反很简单,但是要注意,取反后是不是原码,是否可以直接计算结果

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Python中的重载操作符指的是通过定义类的特殊方法,使得该类的对象可以支持相应的操作符。以下是一些常用的重载操作符及其对应的特殊方法: - 加法操作符: `+`,特殊方法名为 `__add__(self, other)`。 - 减法操作符: `-`,特殊方法名为 `__sub__(self, other)`。 - 乘法操作符: `*`,特殊方法名为 `__mul__(self, other)`。 - 除法操作符: `/`,特殊方法名为 `__truediv__(self, other)`。 - 取模操作符: `%`,特殊方法名为 `__mod__(self, other)`。 - 按位与操作符: `&`,特殊方法名为 `__and__(self, other)`。 - 按位或操作符: `|`,特殊方法名为 `__or__(self, other)`。 - 按位异或操作符: `^`,特殊方法名为 `__xor__(self, other)`。 - 左移操作符: `<<`,特殊方法名为 `__lshift__(self, other)`。 - 右移操作符: `>>`,特殊方法名为 `__rshift__(self, other)`。 - 一元加操作符: `+`,特殊方法名为 `__pos__(self)`。 - 一元减操作符: `-`,特殊方法名为 `__neg__(self)`。 - 一元取反操作符: `~`,特殊方法名为 `__invert__(self)`。 - 小于操作符: `<`,特殊方法名为 `__lt__(self, other)`。 - 小于等于操作符: `<=`,特殊方法名为 `__le__(self, other)`。 - 等于操作符: `==`,特殊方法名为 `__eq__(self, other)`。 - 大于等于操作符: `>=`,特殊方法名为 `__ge__(self, other)`。 - 大于操作符: `>`,特殊方法名为 `__gt__(self, other)`。 通过定义这些特殊方法,我们可以自定义类的行为,使其支持与内置类型相同的操作符
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值