我想這個代碼分析&,&&和|爲此代碼?
for(i = 32; i > 0; i--)
{
if(a&1 != 0) //bit mask
total += b;
a = a >> 1;
b = b << 1;
}
來說明差異在代碼&是用來「屏蔽」了一下,結果就會完全不同,如果&&
已經代替。在這種情況下,表達式1
已被解釋爲真值(TRUE
),而不是用於保留其中一個位的一位位置。正確?但是,如果我不喜歡這東西反而會發生:
for(i = 32; i > 0; i--)
{
if(a|1 != 0) //bit mask
total += b;
a = a >> 1;
b = b << 1;
}
在第一種情況下,1
用於只保留LSB(最低顯著位),即最右邊的位,沒有別的。 |
代替什麼?如果我做了這個改變會有什麼不同?
這是非常有趣的,因爲這些都是從計算機工程中的課程筆記中獲得的,其中的代碼應該是正確的。謝謝你的答案。 –
@NickRosencrantz這是一個非常常見的錯誤。這個優先級是反直覺的,因爲它是D. Ritchie所做的歷史性糟糕的設計選擇。有關詳情,請參閱此處:http://www.lysator.liu.se/c/dmr-on-or.html – ouah