在python中,按位运算的结果与C/C++中位运算结果不同,原因主要是C/C++是按原码来取反。
而在python中,取反的运算的流程是这样的:
- 先获得其二进制(原码),进行取反操作。
- 将第一步的结果,当作补码。求这个补码的原码,这个原码就是输出的结果。
- 补 码求原码的过程,先减1,再取反。
由于是这样的逻辑,导致了python中取反操作,等于在按原码取反之后,多了一个由补码求原码的步骤,导致了结果的偏差。
所以python中所有的取反操作,结果值都是原始值的负数再减一。
要想获得按原码来取反这个操作,唯一的办法是:
- (8位) 和0xff 进行异或
- (16位) 和0xffff 进行异或
与全部都是1的数进行异或操作,等价于取反