我玩弄試圖得到它的正確理解位,我碰到這個問題來了。我將char中的第六位設置爲1,我試圖找出它是否被設置爲1.它給我一個錯誤的答案。位操作
int main(int argc, char** argv) {
unsigned char a=0;
a=a | (1<<6);
int b=a &(1<<6);
cout<< b;
return 0;
}
它給我的結果是64而不是1.爲什麼?
我玩弄試圖得到它的正確理解位,我碰到這個問題來了。我將char中的第六位設置爲1,我試圖找出它是否被設置爲1.它給我一個錯誤的答案。位操作
int main(int argc, char** argv) {
unsigned char a=0;
a=a | (1<<6);
int b=a &(1<<6);
cout<< b;
return 0;
}
它給我的結果是64而不是1.爲什麼?
這確實是正確的和預期的行爲。
檢查位n
是否被設置的方法是這樣的:
return (value & (1U << n)) == (1U << n);
的&
執行按位 AND,所以11111111 & 01000000
是01000000
。
您可以使用:
int b = (a >> 6) & 1;
b
將== 1
如果第六位設置和0
如果事實並非如此。
程序的預期輸出是64,因爲64&64
是64.由於非零值被解釋爲真在if
表達式和條件運算符(&&
,||
),這對很多情況下不夠好:
a |= (1<<6);
if (a & (1<<6))
{
/* this code would get executed */
}
如果你通過在你的變量64S困擾,然後再嘗試這樣的事:
bool b = (a & (1<<6)) ? true : false;
我如果在這裏需要三元運算符不知道,但就是非常清楚發生了什麼事情。
或者你很可能做到這一點:
bool b = a >> 6 & 1;
爲什麼它應該給你1?在你的腦海裏,你覺得'&'做什麼? – 2012-02-19 23:33:08
你做錯了。 2^6 = 64 – UmNyobe 2012-02-19 23:34:58
謝謝看到我的錯誤 – 2012-02-19 23:46:24