在1990版本(ISO C90)中,非固定十进制整数常量的类型是<$ c $的第一个c> int , long int 或 unsigned long int 代表。 (C90没有长长或 unsigned long long 类型)。
在1999和2011版本中,其类型是 int , long int , long long int ;
特定常数的类型(例如 2147483648 )将根据以下因素而有所不同:您正在使用的编译器的整数类型的范围。如果你的编译器的 long 类型恰好是32位,那么 2147483648 将是 long 如果你的编译器使用C90规则( long long 保证至少为64位)。编译器会警告你这个。
你可以添加后缀来指定常量的类型,但没有后缀。 int 。可以为 unsigned int , L 添加 U code> long , UL for unsigned long,等等。
请务必记住, -2147483648 是不是一个整数常数;而 2147483648 本身是一个整数常量, -2147483648 是一个表达式,对该常量应用一元减运算符。根据C90规则,如果常数是 unsigned long 类型,那么这是一个无符号一元减,在无符号算术规则下, code> 2147483648 。根据C99或C11规则, 2147483648 很可能是类型(签名) long long code> -2147483648 ,以及类型 long long 。
有时会看到使用( - 2147483647 - 1)的代码来避免此问题;给定一个32位 int , 2147483647 的类型为 int ,并且表达式的结果产生预期的 int 值没有溢出。