算法筆記(1)——位運算技巧(x & (x?1))
2022-09-04 13:04 作者:Rutubet4994 | 我要投稿
這個技巧出自Brian Kernighan算法,x&(x-1)可以用來把x最低位的1變成0,由此可以用來循環(huán)調(diào)用計算x這個數(shù)的二進制位的1的個數(shù),同樣也可以判斷x是否為2的冪。
下面進行粗略的理解這個公式:
先考慮x和(x-1)在二進制上有什么區(qū)別,通過觀察我們?nèi)菀字溃?x-1)只影響從最低位一直到最低位的1的那一位,比如數(shù)0b11100,減去1后變成了0b11011,高位完全不影響,而x&x =x恒成立,所以對于x&(x-1),只需要考慮那些低位就可以。我們看x的低位,就是0b100這種形式,比如0b1,0b10,0b100,0b1000等等,然后毫無疑問減去1的話就得到了諸如:0b0,0b01,0b011,0b0111等等,也就是說剛好是取反了,這時將這兩個數(shù)進行與運算,得到的就是0,所以這樣是把x的最低位的1給抹除了,而不影響高位。

標簽: