亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【請教】類型轉換中會有很多問題,如下代碼:

#include <stdio.h>

int main()

{

? ? double num = 2.5; ? ? ?//定義浮點型變量num1并賦值為2.5

? ? printf("num的整數部分是%d\n", (int)num);

? ? printf("%d \n",num);

? ? printf("%d \n",2.5);

? ? printf("%d \n",(float)2.5);

? ? //*******

? ? printf("\n\nnum2 = num :\n");

? ? int num2 = num;

? ? printf("%d \n",num2);

? ? printf("%f \n",num2);

? ? printf("%g \n",num2);

? ? return 0;

}

【結果是:】


num的整數部分是2
4196047
4196051
4196051


num2 = num :
2
2.500000
2.5


【個人分析:】

前幾個輸出4196074是因為前一節說的 ?占字節大的數轉換為小的數會出錯

而后面輸出int型的num2會輸出2.5,這個。。。是因為什么呀老師?

正在回答

1 回答

你在第一個printf中是用強制類型轉換的方式將num轉換成int型傳入,不過準確的說,在第二個printf中并不存在類型轉換。

因為printf中%d代表它希望相應的參數類型為int,如果你傳入的不是int型,一般來說編譯器會給出警告的,通常仍可編譯通過,但是在運行時printf函數仍然把那個參數當作int型來讀取和打印。一般計算機中int和double的存儲方式是不一樣的,所以造成打印出很“奇怪”的數。


而那個num2,你用了一個double類型的num來初始化,所以編譯器會先把num轉換成int型來給num2作初值。轉換方式就是截掉小數部分,所以num2的值就是2,類型就是int。

因此printf("%d \n",num2)打印出的結果很正確。同樣的道理,后面的printf就依照錯誤的格式化字符錯誤地打印了,結果并不一定是2.5,實際上打印出什么都有可能。

0 回復 有任何疑惑可以回復我~
#1

林澤華 提問者

非常感謝!
2015-02-15 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

【請教】類型轉換中會有很多問題,如下代碼:

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號