我有一個宏,看起來是這樣的:「按位與」和左填充在C++
Foo(x) ((x - '!') & 070)
如果我把下面的代碼:
Foo('1') => 16
但是,如果我叫以下代碼:
(('1' - '!') & 70) => 0
所以我的問題是,這是怎麼回事?爲什麼x & 070
計算爲x
,但x & 70
計算爲0?
我的猜測是,左邊的額外0迫使60取2個字節而不是1.在這種情況下,不會按位進行如下操作&?
0000 0000 0001 0000 '16
0000 0000 0100 0110 & '70
-------------------
0000 0000 0000 0000
我知道這個答案(0前綴=八進制常量),但我可以誠實地說,在20多年的C編程中,我從來沒有見過它被使用過。這只是其中一件似乎源於它有用的時間,可能與電傳打字機或其他類似的東西有關。作爲一個嵌入式的人,我總是嘲笑,沒有像二進制常量的'b'前綴(是的,我有我自己的方式在C和C++中這樣做,太糟糕了,它不是內置於該語言中)。 – Dan 2010-07-04 16:30:55