为什么标准在常量语法中不包含符号字符?
它只提到数字,符号字符只存在于指数中。
它只提到数字,符号字符只存在于指数中。
int a = -4;
INT_MIN
这样的东西,其中INT_MIN
的绝对值不能表示为一个int
?我不是关于这种事情的语言律师;我会假设将两个元素分开会在操作数(没有符号)本身不合法时引起问题。 - ShadowRangerint
的范围。你可以将它们视为任意精度的整数,需要时进行数据类型转换即可。 - Dolda2000int
、long int
或long long int
中的第一个。 - Keith ThompsonINT_MIN
是 -32768,则表达式 -32768
的类型是 long
,而不是 int
类型。您可能会在 <limits.h>
中看到 INT_MIN
的定义类似于 (-32767-1)
。 - Keith Thompson-
是常数 -2
的一部分,那么 4-2
就会成为语法错误(因为一个标记始终是最长可能的字符序列)。此外,-2147483648
和 - 2147483648
的语义将不同(第一个将是 int
,第二个将是 long
,假设 int
是32位,long
更长)。这两件事都会令人困惑。-
总是一个运算符,-2147483648
的语义有时会有些出乎意料,但更常见的 x-1
的结果如预期一样。所以大多数编程语言,包括 C 语言,都是这样工作的。a++++b
是一个有效的表达式(实际上两者都不是语法错误)。添加空格使两个表达式都有效:a++ + ++b
和4 - 2
。这不是一个有效的理由。简单的答案是:没有必要,因为对于非常量,-
运算符是必需的。 - too honest for this site4-2
中放置空格,并且许多语言中有很多代码表明,并非所有程序员都希望这样做。语言设计者倾向于为其用户设计。 (还有他们自己:K&R并不是空格的重度消费者。) - rici
-1
不是一个常量,而是由一元减号运算符应用于常量1
得到的表达式。这可能会导致问题。例如,假设int
的范围为-32768
..+32767
。那么表达式-32768
不是类型为int
的常量。常量32768
的类型是long
,而一元减号不会改变它的类型。 - Keith Thompson