在c中,爲什麼〜177產生-178,而〜0177產生-128?0177與177及其互補
我試着打印出前後的值,但無法辨別任何東西。我也無法解釋這個話題。我正在閱讀「The C Programming Language」。
在c中,爲什麼〜177產生-178,而〜0177產生-128?0177與177及其互補
我試着打印出前後的值,但無法辨別任何東西。我也無法解釋這個話題。我正在閱讀「The C Programming Language」。
常量177
和0177
不是相同的值。前者是十進制,後者是八進制。
從C standard的節6.4.4.1:
十進制常量始於一個非零數字和由十進制數字序列的。 八進制常數由前綴0 組成,可選地僅後面跟隨數字0至7的序列。 A 十六進制常量由前綴0x或0X組成,後跟 序列的十進制數字和字母a(或A)至f(或 F),值分別爲10至15。
十進制常數的值是以10爲基礎計算的; 八進制常數,基數8;那是一個十六進制常數,基數爲16. 詞法上的第一位是最重要的。
八進制常數0177
等於十進制127。作爲32位十六進制值,它表示爲0x0000007f。在這個值上使用~
運算符會給你0xffffff80。假設負數爲2的補碼錶示,這是十進制的-128。
前導零表示0177
是八進制數(127)。
因爲「0」是八進制符號的前綴。 –
http://stackoverflow.com/questions/791328/how-does-the-bitwise-complement-operator-work – rsp