2012-02-20 167 views
0

我的問題是類似的問題的一個here邏輯的解釋需要

最好的答案是:

int isNotZero(unsigned int n){ 
    n |= n >> 16; 
    n |= n >> 8; 
    n |= n >> 4; 
    n |= n >> 2; 
    n |= n >> 1; 
    return n & 1; 
}; 

誰能請解釋我如何在上述算法的工作?

回答

6

n是一個32位整數。 n |= n >> 16採用16位最高位,並確保在較低16位中的每個設置位設置低16位的等效位;同時保持已經設置在低16位的任何位。

這樣,您現在有一個16位整數,非常精確,當原始的32位整數是非零時。接下來的步驟類似地將數字折成8位,然後是4,然後是2,然後是1.

最後,最後一行檢查是否設置了最低位,通過以上告訴你原始數是否爲非-零。