線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4341
推到 Plurk!
推到 Facebook!

關於型態自動轉型 及強制轉型問題

答題得分者是:syntax
shihyu
一般會員


發表:20
回覆:17
積分:7
註冊:2002-11-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-03 10:28:47 IP:203.70.xxx.xxx 訂閱
<textarea class="cpp" rows="10" cols="60" name="code"> #include int main(void) { float a = 123.123; int b = 456, c; c = a b; /* 自動轉型 , 強制轉型相當於 c = (int)(a (float)b) */ printf("%d\n",c); return 0; } </textarea> 想知道 c = a b 這運算式中 , b 要轉型成 float 才可以跟 a 做相加 , 那b 是把 456 值拿出來用一塊記憶體去暫存擺放 456 成浮點數的格式嗎? 之後再跟 a 做相加? 1.編譯器做這樣轉型是否要多一塊記憶體存放轉型成浮點數格式的b? 2.自動轉型與強制都是這樣處理嗎? 強制轉型效能會不會比較高點不需要讓編譯器再去判斷? 謝謝
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-03 10:52:18 IP:211.22.xxx.xxx 未訂閱
各家Compiler處理型態不同但相容可以隱喻(Implicit)轉換的方法都不同,但是皆大同小異,一般都是把精度大的型態降級後再做運算。為何如此?應該是避免Overflow吧!?
我沒研究過Compiler,也不知道Compiler在對變數作升降級時變數處理的機制,這些問題可能要請問學習與研究過Compiler的先進前輩。
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-03 15:54:12 IP:61.64.xxx.xxx 訂閱
1.各家作法不同,但確實需要一個空間,不過是使用Register 或是 Memory ,必須去問生產、設計 Compiler 的公司
2.效能會高(一點),大概千萬億分之一秒吧!(我猜),僅限編譯時期


===================引 用 shihyu 文 章===================
<textarea name="code" cols="60" rows="10" class="cpp">#include int main(void) { float a = 123.123; int b = 456, c; c = a b; /* 自動轉型 , 強制轉型相當於 c = (int)(a (float)b) */ printf("%d\n",c); return 0; } </textarea> 想知道 c = a b 這運算式中 , b 要轉型成 float 才可以跟 a 做相加 , 那b 是把 456 值拿出來用一塊記憶體去暫存擺放 456 成浮點數的格式嗎? 之後再跟 a 做相加? 1.編譯器做這樣轉型是否要多一塊記憶體存放轉型成浮點數格式的b? 2.自動轉型與強制都是這樣處理嗎? 強制轉型效能會不會比較高點不需要讓編譯器再去判斷? 謝謝
系統時間:2024-05-02 14:02:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!