0
我想知道爲什麼二進制數不能用於位運算符?爲什麼C編譯器不接受這個條件賦值?
//works
msgSize = (*(msgbody+1) & 0x80)?*(msgbody+5):*(msgbody+3);
//doesn't compile
msgSize = (*(msgbody+1) & 0b10000000)?*(msgbody+5):*(msgbody+3);
我想知道爲什麼二進制數不能用於位運算符?爲什麼C編譯器不接受這個條件賦值?
//works
msgSize = (*(msgbody+1) & 0x80)?*(msgbody+5):*(msgbody+3);
//doesn't compile
msgSize = (*(msgbody+1) & 0b10000000)?*(msgbody+5):*(msgbody+3);
C中不支持二進制文字;如果他們可用,他們是一個擴展。我建議你的編譯器發出一個錯誤,因爲它不識別二進制文字0b10000000
。因此,你的編譯器可能發出錯誤這一點,太:
int main(void) {
int msgSize = 0b10000000;
return 0;
}
我會建議使用0x80
或1 << 7
代替。
我認爲你用gcc編程... C沒有二進制文字。 – Sebivor
@modifiablelvalue你是第一:)我正在與IAR(不知道它使用什麼編譯器)。二進制文字與ObjC的Clang設置正常工作。 – bioffe
無關緊要。 SSCCE可能看起來像[this](http://ideone.com/T050u3)。正如你可以從我的SSCCE看到的,C中沒有二進制文字。 – Sebivor