#include<stdio.h>
int main()
{
printf("%d\n", sizeof(2147483648));
printf("%d" , sizeof(2147483647+1));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
8
4
Run Code Online (Sandbox Code Playgroud)
我知道这sizeof(2147483648)是8个字节,因为它不能适合4个字节并被提升为long long int.但我不明白发生了什么事情sizeof(2147483647+1)
我发现了类似的问题,但没有讨论第二种情况.
oua*_*uah 19
用C整数常量的规则是,一个十进制整数常数具有其中它可以在被表示到第一类型:int,long,long long.
2147483648
Run Code Online (Sandbox Code Playgroud)
不适合入int到您的系统(如最大int在您的系统2147483647),所以它的类型是long(或long long取决于你的系统).所以你在计算sizeof (long)(或sizeof (long long)取决于你的系统).
2147483647
Run Code Online (Sandbox Code Playgroud)
是int你的系统中的一个,如果你添加1到int它仍然是一个int.所以你在计算sizeof (int).
请注意,sizeof(2147483647+1)在系统中调用未定义的行为,因为INT_MAX + 1溢出和有符号整数溢出是C中未定义的行为.
请注意,虽然通常2147483647+1在系统中调用未定义的行为(INT_MAX + 1溢出和有符号整数溢出在C中是未定义的行为),但是sizeof(2147483647+1)不会调用未定义的行为,因为sizeof在这种情况下不评估操作数.
| 归档时间: |
|
| 查看次数: |
829 次 |
| 最近记录: |