这里记录几个位运算,防止自己忘记
1.a^b--------无进位相加,跟我们平时加法一样,只不过这个不会有进位信息
比如:6^5---->00000…00000000110
--------------------00000…00000000101
----------------- = 00000…00000000011 也就是3
所有就有:0^a=a ; a^a=0
2.a & ((~a) + 1) --------把一个int类型的数,提取出其二进制中最右侧的1来
比如:6------------->00000…00000000110 要把6的二进制中最右侧的1提取出来
先将6取反得到~6->11111…1111111111001
在将~6加1---------->11111…1111111111001
±------------------------0000…00000000001
------------------------=11111…1111111111010
然后再跟6做与运算----->11111…1111111111010
------------------------------->00000…00000000110
-------------------------------=000000…00000000010
3.num%a(a是2的次方) 等同于num&(a-1)