又来送分啦,问题多多,新手又来请教了嘿

来源:百度知道 编辑:UC知道 时间:2024/05/24 16:42:08
main()
{int a=12345678;
printf("a=%ld",(long)a);
}

请问这里边哪错了吗```?
开始我是定义了a int类型```数值超出了范围了```
可我在输出时不是已经将他强行转换为 long 了吗```??怎么输出显示是错误的呢```?

main()
{int a=123
printf("%f",(float)a);
}
然后这样是可以的啊```
为什么第一个例子就不行呢```?
谁知道啊```谢谢哦```
v

首先,不同的编译器,可能为int分配的字节数不同。
其次,你是在没有强转之前对变量赋值的,此时,如果编译器分配的字节数目不够,当然会溢出,那么,也就是说,你遇到的问题,在你给a赋值时,数据已经溢出了,此时(比如int分配4个字节)这四个字节存的当然就不是正确的数了。而你强转之后,仅仅是将4个字节变为8个字节(假定long是分配8个字节),而字节数增多并不说明你的之前赋值还能重新赋一遍值。所以强转之后输出结果是错误的。

举个例子,你拿一个杯子(假设500ml),装进去两杯的水(1000ml),(当然多的会溢出)。
这时候,你在将这个杯子拉长(假如可以的话),拿给别人喝,你说,他喝下的有多少水啊!!!

第一个没错误啊,运行后显示a=12345678
真想截个图给你看,不知道你是用的什么编译器,我用的是Visual C++6.0.真的是这样的结果.