C語言里“/”在表示兩個數(shù)相除時具體處理很有意思:看看這段代碼的輸出: 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 說明:當(dāng)兩個都是整數(shù)是,計算的實際上是整數(shù)商,拋棄余數(shù)(1); 當(dāng)一個是小數(shù)時,按照小數(shù)計算,結(jié)果是小數(shù)(3、4、5、6)。此時如果按照整數(shù)輸出,系統(tǒng)就將浮點數(shù)轉(zhuǎn)化為整數(shù),(4、6)出現(xiàn)乖乖的結(jié)果; 有意思的是(2),將5/3的記過按照浮點數(shù)輸出,結(jié)果是839.209961,說明我的機器整數(shù)是32位,而浮點數(shù)是用double表示的,80位,由于字長不夠,系統(tǒng)就取了整數(shù)后面的字節(jié)作為浮點數(shù)的一部分,所以輸出成了(2)的樣子,這是隨機的,和機器有關(guān)。 |
|
來自: 清華大學(xué)閆娜 > 《c語言》