1:前言
前言:二进制按位运算包括有 按位或&,按位与|,按位异或^,按位取反~, 还有左移<<, 右移>> 等操作,都是非常容易理解和应用的。
除了本篇要讲的 按位取反操作,相信各位在第一次使用这个运算的时候一定都被它的密之规则迷惑,输出结果与我们的预期结果不一,虽然在多次试验之后你记住了他的输出结果的对应规则,但可能对运算规则不是很熟悉。
本篇主旨:不会用的学会用;会用的了解下原理;原理也会的帮我看看我有没有说错
2:例子与解析
先看来一个例子
a = [199 , 60 , -64]
print(a) #[199, 60, -64]
for i in range(len(a)):
print(~a[i] , end=' ') #-200, -61, 63
- 首先我们来看输出的对应规则 199 变成了 -200 ; 60 变成了 -61 ; -64 变成了 63,这些都是直观可以看到的
- 然后我们来分别解释一下规则
- 一 :199对应二进制是 11000111
二:按照正常逻辑按位取反嘛,那就变成了 00111000
三:然后代入计算规则,公式为: -(~00111000+1)。不要忘记了括号外的负号和括号内的取反
四:公式计算过程,第一步 -(11000111+1)。第二步 -(11001000)。第三步 -11001000
五:现在我们发现 -11001000 对应的十进制数果然是 -200 - 一 :60对应二进制是 00111100
二:按照正常逻辑按位取反嘛,那就变成了 11000011
三:然后代入计算规则,公式为: -(~11000011+1)。不要忘记了括号外的负号和括号内的取反
四:公式计算过程,第一步 -(00111100+1)。第二步 -(00111101)。第三步 -00111101
五:现在我们发现 -00111101 对应的十进制数果然是 -61 - 一 :-64对应二进制是 -01000000
二:按照正常逻辑按位取反嘛,那就变成了 -10111111
三:然后代入计算规则,公式为: -(~-10111111+1)。不要忘记了括号外的负号和括号内的取反
四:公式计算过程,第一步 -(-01000000+1)。第二步 -(-00111111)。第三步 00111111
五:现在我们发现 00111111 对应的十进制数果然是 63
3:公式总结
公式总结: -(~反码+1)
由于 ~反码=源码
所以公式化简为:-(源码+1)