C中数字的默认数据类型是什么?

What is the default data type of number in C?

在 C 中,

unsigned int size = 1024*1024*1024*2;

这会导致警告 "integer overflow in expression..." 而

unsigned int size = 2147483648;

结果没有警告?

第一个表达式的正确值是否默认为int?它在 C99 规范中的什么地方提到?

unsigned int size = 1024*1024*1024*2;

此表达式 1024*1024*1024*2(在表达式 10242 中属于 signed int 类型)产生 signed int 类型的结果和此值对于 signed int 来说太大了。因此,您会收到警告。

在有符号乘法之后,它被分配给 unsigned int

当使用不带任何后缀的十进制常量时,十进制常量的类型是第一个可以表示的,按顺序(当前 C 标准,6.4.4 常量 p5):

  • 整数
  • 长整数
  • long long int

第一个表达式的类型是int,因为每个值为1024和2的常量都可以表示为int。这些常量的计算将以 int 类型完成,结果将溢出。

假设INT_MAX等于2147483647并且LONG_MAX大于2147483647,第二个表达式的类型是long int,因为这个值不能表示为int,但可以表示为长整数如果INT_MAX等于LONG_MAX等于2147483647,则类型为long long int.