2013-03-29 82 views
0

我想知道爲什麼二進制數不能用於位運算符?爲什麼C編譯器不接受這個條件賦值?

//works 
msgSize = (*(msgbody+1) & 0x80)?*(msgbody+5):*(msgbody+3); 

//doesn't compile 
msgSize = (*(msgbody+1) & 0b10000000)?*(msgbody+5):*(msgbody+3); 
+7

我認爲你用gcc編程... C沒有二進制文字。 – Sebivor

+0

@modifiablelvalue你是第一:)我正在與IAR(不知道它使用什麼編譯器)。二進制文字與ObjC的Clang設置正常工作。 – bioffe

+0

無關緊要。 SSCCE可能看起來像[this](http://ideone.com/T050u3)。正如你可以從我的SSCCE看到的,C中沒有二進制文字。 – Sebivor

回答

1

C中不支持二進制文字;如果他們可用,他們是一個擴展。我建議你的編譯器發出一個錯誤,因爲它不識別二進制文字0b10000000。因此,你的編譯器可能發出錯誤這一點,太:

int main(void) { 
    int msgSize = 0b10000000; 
    return 0; 
} 

我會建議使用0x801 << 7代替。

相關問題