C语言int p=10; printf ("%d",1.2*p)输出值为什么为0? 令p=2,输出值又为什么等于858993459了? 难道是因为%d的存在所以后面不能有小数参与运算?
这是一个很底层的问题,证明了高级语言的屏蔽底层的重要性和c语言对内存的灵活操纵,让人摸不到头脑。
0x40 28 00 00 00 00 00 00
,四个字节。为何是这样,自己去翻一本计算机语言教材或者百度看看怎么存浮点数吧00 00 00 00 00 00 28 40
,从左至右内存地址增大。printf("%d",)
很可惜打印的是int
,32位正好取了前面的4个字节00 00 00 00
不过要是p=2
那么最后结果2.4,你找了一个很难分解的小数,我就直接抄内存里的结果了,懒得笔算,存储为0x33 33 33 33 33 33 03 40
,拿出前4个字节,33 33 33 33
对应结果为858993459.
printf ("%f",1.2*p);
或者 printf ("%d",(int)1.2*p); 但是这样写1.2取整为1,结果10