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

How is it possible that an octal literal can be negative?

为什么 n

const int n = -0123;

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

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

How is it possible that an octal literal can be negative?

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

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

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

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

但是,您可以通过编写 4u 来将其解释为无符号数。现在您可以从字面上看到它是被解释为无符号数的数字 4。同样,值 "Hello World" 是一个字符串文字,因为您可以在代码中知道它是字符串 "Hello World”。另一方面,用户定义 class Person没有在代码中看到的字面方式。在 C++14 中,您可以创建用户定义的文字,但是对于 Person,这仍然可以说是没有意义的。标准库在 <chrono> header,分别定义秒、毫秒和纳秒的 smsns 等文字。

当写八进制数 -0123 时,您告诉我们将其解释为八进制值,就像 0xFF 按字面解释为十六进制一样。 - 符号只是一种对数字 0123.

应用一元否定运算符的方法