2017-05-16 39 views
2

在c中,爲什麼〜177產生-178,而〜0177產生-128?0177與177及其互補

我試着打印出前後的值,但無法辨別任何東西。我也無法解釋這個話題。我正在閱讀「The C Programming Language」。

+5

因爲「0」是八進制符號的前綴。 –

+0

http://stackoverflow.com/questions/791328/how-does-the-bitwise-complement-operator-work – rsp

回答

2

常量1770177不是相同的值。前者是十進制,後者是八進制。

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。

3

前導零表示0177是八進制數(127)。