IBM asked in 電腦與網際網路程式設計 · 1 decade ago

請問C++中:if(j&(1<

請問 C++程式中

if ( j & (1<<i) ) 是什麼意思?

1<<i 是否指 2的i次方的意思?

有一點急,煩請賜教解答,感激不盡!

Update:

所以這段的意思就是指

if ( j是2的倍數 ) 就是 True?

發問要達四小時才能選最佳解答,

先謝謝您快速又詳細的解答!!

1 Answer

Rating
  • 1 decade ago
    Favorite Answer

    (1 << i) 其實就是一個 mask. 意思就是, 檢查 j 的第 i 個 bit 是不是 1.

    1<<i 中, 若 i = 0, 則 (1 << 0) 即 1 = 0001, 與 j 做 &, 無論 j 是多少, 只看 j 的 bit 0, 若是 1, 就是 1; 若是 0, 則就是 0.

    1<<i 中, 若 i = 1, 則 (1 << 1) 即 2 = 0010, 與 j 做 &, 無論 j 是多少, 只看 j 的 bit 1, 若是 1, 就是 1; 若是 0, 則就是 0.

    1<<i 中, 若 i = 2, 則 (1 << 2) 即 4 = 0100, 與 j 做 &, 無論 j 是多少, 只看 j 的 bit 2, 若是 1, 就是 1; 若是 0, 則就是 0.

    1<<i 中, 若 i = 3, 則 (1 << 3) 即 8 = 1000, 與 j 做 &, 無論 j 是多少, 只看 j 的 bit 3, 若是 1, 就是 1; 若是 0, 則就是 0.

    2009-05-15 02:08:57 補充:

    j & (1<

    2009-05-15 02:14:09 補充:

    奇怪, 補充的答案大部分不見了, yahoo 知識界面有bug.

    if(j & (1<

    2009-05-15 02:14:57 補充:

    奇怪, 補充的答案大部分不見了, yahoo 知識界面有bug.

    if(j & (1<<i)) 結果確實是 TRUE/FALSE 的檢查. 但是卻不能等於檢查 j 是否為 2 的倍數. 問題出在 當 i == 0 時. 此時檢查的是 bit 0. 而 bit 0 若是 0, 則為偶數; 但 bit 0 若是等於 1, 則是奇數.

    你想檢查 j 是否為 2 的倍數的話, 其實就是檢查 j 是否為偶數/奇數. 所以只要 if (j & 1) 即可.

    2009-05-15 03:16:44 補充:

    補充:

    In C++, "0" is false and any non-zero value is true

Still have questions? Get your answers by asking now.