簡體   English   中英

為什么printf輸出double的隨機值,而int輸出0.000000?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM