【发布时间】:2017-05-17 02:07:44
【问题描述】:
在c中,为什么~177产生-178,而~0177产生-128?
我尝试打印出之前和之后的值,但无法辨别任何东西。我也无法解释这个话题。我正在阅读《C 编程语言》。
【问题讨论】:
-
因为
0是八进制表示法的前缀。
标签: c
在c中,为什么~177产生-178,而~0177产生-128?
我尝试打印出之前和之后的值,但无法辨别任何东西。我也无法解释这个话题。我正在阅读《C 编程语言》。
【问题讨论】:
0 是八进制表示法的前缀。
标签: c
前导零表示0177 是八进制数(127)。
【讨论】:
常量177 和0177 不是同一个值。前者是十进制,后者是八进制。
来自C standard 的第 6.4.4.1 节:
3 十进制常量以非零数字开头,由一系列十进制数字组成。 八进制常量由前缀 0 组成 可选地后跟仅由 0 到 7 的数字序列。 A 十六进制常量由前缀 0x 或 0X 后跟 十进制数字和字母 a(或 A)到 f(或 F) 值分别为 10 到 15。
4 十进制常量的值以 10 为底计算; 八进制常数,以 8 为底;十六进制常数,以 16 为基数。 从词法上讲,第一个数字是最重要的。
八进制常数0177 等于十进制的127。作为 32 位十六进制值,它表示为 0x0000007f。对这个值使用~ 运算符会得到 0xffffff80。假设 2 的补码表示为负数,则为十进制的 -128。
【讨论】: