【问题标题】:0177 versus 177 and their complements [duplicate]0177与177及其补码[重复]
【发布时间】:2017-05-17 02:07:44
【问题描述】:

在c中,为什么~177产生-178,而~0177产生-128?

我尝试打印出之前和之后的值,但无法辨别任何东西。我也无法解释这个话题。我正在阅读《C 编程语言》。

【问题讨论】:

标签: c


【解决方案1】:

前导零表示0177 是八进制数(127)。

【讨论】:

    【解决方案2】:

    常量1770177 不是同一个值。前者是十进制,后者是八进制。

    来自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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      相关资源
      最近更新 更多