按位取反运算符:~
创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的牙克石网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
运算结果:~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数组时,可以根据一个相同长度的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表示。
数据类型!!!!
也就是结果只是数据类型不同,那转换下就好了:
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