C语言里“/”在表示两个数相除时具体处理很有意思:看看这段代码的输出: printf("%d\n",5/3); printf("%f\n",5/3); printf("%f\n",5.0/3); printf("%d\n",5.0/3); printf("%f\n",5/3.0); printf("%d\n",5/3.0); (1)1 (2)839.209961 (3)1.666667 (4)-1431655765 (5)1.666667 (6)-1431655765 说明:当两个都是整数是,计算的实际上是整数商,抛弃余数(1); 当一个是小数时,按照小数计算,结果是小数(3、4、5、6)。此时如果按照整数输出,系统就将浮点数转化为整数,(4、6)出现乖乖的结果; 有意思的是(2),将5/3的记过按照浮点数输出,结果是839.209961,说明我的机器整数是32位,而浮点数是用double表示的,80位,由于字长不够,系统就取了整数后面的字节作为浮点数的一部分,所以输出成了(2)的样子,这是随机的,和机器有关。 |
|