5.4 Explain what the following code does: ((n & (n-1)) == 0).
這道題讓我們解釋一個表示式((n & (n-1)) == 0),是說一個數跟比它小1的數字按位相與,結果全是0的情況,那麼說明兩個數每個位置上至少都有一個0,那麼最有可能的情況是連個數的各個位置的數是相反的,而且還要相差1,那麼最後可能的情況是一個數的最高位是1,其餘位都是0,則其減1即為向最高位借1,其餘位均為1,例如: 二進數的10000和1111就相差1,且滿足表示式。那麼我們知道最高位是1,其餘位都是0的二進數就是2的次數。
LeetCode上的原題,請參見我之前的部落格Power of Two 判斷2的次方數。