uint32_t bits = 0;
bits |= 1<< 31;
bits |= 1<< 15;
bits |= 1<< 14;
bits |= 1<< 13;
這給了我10000000000000001110000000000000
,並在另一個函數我做*(bits) |= 0 << 15;
但它沒有做任何事情,它應該改變16 1一個0,所以下面應該來:10000000000000000110000000000000
有什麼幫助嗎?
uint32_t bits = 0;
bits |= 1<< 31;
bits |= 1<< 15;
bits |= 1<< 14;
bits |= 1<< 13;
這給了我10000000000000001110000000000000
,並在另一個函數我做*(bits) |= 0 << 15;
但它沒有做任何事情,它應該改變16 1一個0,所以下面應該來:10000000000000000110000000000000
有什麼幫助嗎?
將位更改爲0的正確方法是否定and
,例如,
bits &= ~(1 << 15);
你要做的:
bits &= ~(1 << 15)
清零位被完成,-ING與補充,即:
*(bits) &= ~(1 << 15);
(1 << 15)
產生了許多與15位設置爲1
:
00000000000000001000000000000000
然後按位NOT運算符反相,併產生一個數字,除了15位的所有的人:
11111111111111110111111111111111
當你和這個號碼原來,在15個位置的位被清除:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
&
11111111111111110111111111111111
================================
XXXXXXXXXXXXXXXX0XXXXXXXXXXXXXXX
其中X標記原始位。
'0 << 15'爲'0'。不管你多少次向左或向右移動'0',你總是以'0'結尾。 –
在* *(bits)中取消引用| = 0 << 15;'應該在那裏?第二個'bits'不是'uint32_t'類型嗎?閱讀這個問題和答案,這種不一致似乎有點混亂,儘管與問題無關。 – Nabla