【问题标题】:How is it possible that an octal literal can be negative?八进制文字怎么可能是负数?
【发布时间】:2018-08-25 18:24:34
【问题描述】:

为什么n

const int n = -0123;

八进制文字?我认为所有八进制文字都必须以 0 开头,而这个不是,因为它以负数开头。

这是我知道的一个小问题,但它让我很困惑!

【问题讨论】:

  • - 是文字的一部分吗?
  • 我很确定-0123 以零开头。同样,您可以为 -255 执行 -0xFF,为 -2 执行 -0b010
  • 不,我的意思是字面量是0123,并且您已将一元- 运算符应用于结果值。
  • 0123 是文字,- 是一元减号

标签: c++ octal


【解决方案1】:

八进制文字怎么可能是负数?

没有负整数文字,只有正整数。这里的文字是 0123,它确实以 0 开头,因此是八进制的。该表达式中的- 是一元减号运算符。

【讨论】:

    【解决方案2】:

    这绝对是真的。但是,这同样适用于所有整数文字 - 十进制、十六进制、八进制和二进制。事实上,没有负整数文字。 -1 等表达式将一元减号运算符应用于文字表示的值,这可能涉及隐式类型转换 (reference)。

    【讨论】:

      【解决方案3】:

      你似乎对文字有点困惑,所以:

      简而言之,字面量是一种描述可以在代码中字面看到的类型的方式。整数是文字,因为当您在代码中写入时,例如 4。您可以字面意思看到它是数字 4,默认情况下,数字被解释为 ints,除非它们后面有一个点 (.),或者任何其他有效的后缀。

      但是,您可以通过编写 4u 来将其解释为未签名。现在您可以从字面上看到它是被解释为无符号的数字 4。同样,值 "Hello World" 是字符串文字,因为您可以在代码中知道它是字符串 "Hello World"。另一方面,用户定义的类 Person 在代码中没有文字方式. 在 C++14 中,您可以创建用户定义的文字,但对于 Person,这仍然可以说毫无意义。标准库在 <chrono> 标头中使用它,定义诸如 s、@987654331 之类的文字@ 和 ns 分别表示秒、毫秒和纳秒。

      在编写八进制 -0123 时,您告诉将其解释为八进制值,就像 0xFF 字面解释为十六进制一样。 - 符号只是将一元否定运算符应用于数字 0123 的一种方式。

      【讨论】:

        猜你喜欢
        • 2011-07-09
        • 2020-01-10
        • 2011-10-17
        • 1970-01-01
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        • 2015-09-07
        • 1970-01-01
        相关资源
        最近更新 更多