#include<stdio.h>
int main()
{
short i = 90L;
long j = 90;
printf("%d", sizeof(i));
printf("%d\n", sizeof(j));
return 0;
}
我刚刚读到,如果我们将L放在一个整数值的末尾,那么实际上它会使存储等于long值,所以基本上它们的意思是这样说,就像我计算两者的大小一样变量,它是不同的,如果它实际上占用了一个长变量的大小,那么显然它会显示大小为4个字节,但它显示的大小只根据短数据类型的大小,那背后的原因是什么呢。
值是否被截断但是当我修改i的值时,它将其打印为仅为90,所以一切都发生了。
答案 0 :(得分:6)
short i=90L;
90L
是long
类型的常量。初始化将该值转换为short
。
long j=90;
90
是int
类型的常量。初始化将其转换为long
类型。
对象(变量)的大小与其当前值无关。它是它在内存中占用的字节数。
答案 1 :(得分:1)
来自C标准(6.5.3.4 sizeof和alignof运算符)
2 sizeof运算符产生其操作数的大小(以字节为单位) 可以是表达式或类型的带括号的名称。 大小 是根据操作数的类型确定的。
与sizeof( short )
对应的sizeof( i )
小于与sizeof( long )
对应的sizeof( j )
。
编译器无法容纳比为指定类型分配的数据更多的数据。:)