python中的按位取反运算

Python013

python中的按位取反运算,第1张

按位取反运算符:~运算结果:~x=-(x+1) 例如:~9为-10 ~(-9)为8 这不是按位取反吗?怎么结果是这样? 看下面。转二进制:0 1001 计算补码:0 1001 要知道它所表达的数是多少,需要转换为原码 _____ 转为原码:按位取反:1 1001 末位加一:1 1010 符号位为1是负数,即-10 转二进制:1 1001 计算补码:1 0111 要知道它所表达的数是多少,需要转换为原码____ 转为原码:正数的补码和原码相同,仍为:0 1000,即8

python 3的整型以16bit递增。

0xf0 =0b 0000 0000 1111 0000

~0xf0之后得到1111 1111 0000 1111

[1][111 1111 0000 1111]

确定是负数,有负数等于绝对值反码加一。求补码形式。

绝对值减1得:111 1111 0000 1110

反码得:000 0000 1111 0001

得-0xf1即-241(你那的~a[0]得-241)

要求得到[0,256),限定一下范围即可。

>>> (~a[0])&0xff

15

在使用python数组时,可以根据一个相同长度的bool数组来做切片,比如:

但有时候我们想要反转这个索引,取出数组内其他元素该怎么办呢?

当然要把索引列表内的True变成False,False变成True。而python中not只能作用在标量上,而不能作用在数组上。

联想到True对应1,False对应0,那是否可以这么做:

结果是不行:

因为使用1-index后得到的是包含0和1的数组,据此做切片只能得到对应0和1索引处的元素。

真难!!!!orz

噫 这时再回顾一个前面的操作,考虑到True/False和1/0的对应关系,我们把True和False是转换成了1和0,从bool类型的角度,我们实现了True变成False和False变成True的目标,但是从数据类型上看,并没有做到,最终用的0和1表示。

数据类型!!!!

也就是结果只是数据类型不同,那转换下就好了: