[英]Why does printf output random values for double and 0.000000 for int?
我知道這是一個簡單的問題,但是在我編碼時就出現了,我想知道它現在是如何工作的。 因此,我的第一個問題是,當給printf賦予一個如下所示的整數,但是期望一個%f浮點值時,為什么總是輸出0.000000? 我在Linux終端上的GCC中運行它。
int main() {
int a = 2, b = 5, result = 0;
result = b/a*a;
printf("%f\n", result);
}
//Above printf statement outputs 0.000000 every time.
然后,當我使用下面的代碼並在期望%i整數值時給printf加倍時,輸出始終是隨機/垃圾。
int main() {
double a = 2, b = 5, result = 0;
result = b/a*a;
printf("%i\n", result);
}
//Above printf statement outputs random numbers every time.
我完全理解上面的代碼是不正確的,因為printf輸出類型與我輸入的類型不同,但是我希望它對每種錯誤形式都以相同的方式起作用,而不是像這樣更改。 剛引起我的好奇心,所以我想我會問。
基本上是因為,如果您將構成一個小整數的位解釋為好像是一個雙精度型,則它看起來像是0的雙精度值。而如果您將代表一個小雙精度值的那些位解釋為一個整數,則看上去就更像是有趣。 以下是指向頁面的鏈接,該頁面描述了如何使用位表示雙精度數 : http : //en.m.wikipedia.org/wiki/IEEE_floating_point 。 有了這個鏈接和一點耐心,您實際上可以算出給定double將被解釋為的整數值。
您使用了錯誤的格式說明符
int a = 2, b = 5, result = 0;
result = b/a*a;
printf("%d\n", result);
...
double a = 2, b = 5, result = 0;
result = b/a*a;
printf("%f\n", result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.