位运算的精髓
简直tmd绝了,位运算能被玩出这么多花活。
给个数如2,希望你把它的二进制数偶数位的全部右移动一个。例如以前是011010 现在希望是100101。
怎么做,
((num&0xaaaaaaaa)>>1 | (num&0x55555555)<<1) 直接得到答案。
用0xa来保留偶数位去除奇数位,然后右移动1,用0x5来保留奇数位去除偶数位然后左移动1.这样就告成了。
值得一提的是,python中整数虽然是以补码形式保存的,但是负数特殊,负数输出的是原码的二进制前面加了个负号。所以如果想要用负数进行二进制的位运算,要先把负数&0xffffffff来把所有都置1.
异或操作^
异或操作就是相同位0不同为1,可以用来进行判断字符串中字符出现得次数是不是偶数。通过异或来保存1<<(ord(chr)-1),出现两次则通过异或直接消除掉了。最后用count进行统计来获得有多少个出现的次数是奇数多少个是偶数。

浙公网安备 33010602011771号