天天看点

算法模块学习之位运算

这里记录几个位运算,防止自己忘记

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)

继续阅读