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
(在表达式 1024
和 2
中属于 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
.
在 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
(在表达式 1024
和 2
中属于 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
.