![]() |
C 教材:其他資料型態與它們之間的轉換 |
如果是第一次閱讀,那麼先看看就好。以後再回來複習,會逐漸明白。
除了 int 和 double 之外, C 還有其他幾種基本的資料型態:char、short、 long、float。 它們都是保留字。 其中 char 是用 8 bits (1 byte) 記錄、以二補數解讀的整數, short 是用 16 bits (2 byte) 記錄、以二補數解讀的整數。 所以,宣告為 char 的變數,在記憶體中佔據一個 byte, 它能夠記錄從 -128 到 127 之間 (含) 的所有整數。 其他的資料型態,都留到以後再談。
讀者或許注意到,在 fahr70.c 裡面,我們定義 fahr 的指令是
fahr = 70;雖然 70 是個整數,但是 fahr 宣告為浮點數, 所以,當 C 要定義 fahr 的值的時候, 必須先將整數 70 轉變為浮點數 70.0,再以浮點數的解讀方式, 將 70.0 儲存到記憶體裡面。 所以,上面那個語句的效果,和下面這個相同:
fahr = 70.0;也和下面這個相同:
fahr = 70.;
當我們將「小」的整數資料型態轉換給「大」的整數資料型態的時候, 它的值不會失真。例如將 char 的值轉換給 int 是安全的。 但是,反過來就不一定了。比方說,實驗
得到答案char c; int x; x=1025; c=x; printf("%d\n", c); x=255; c=x; printf("%d\n", c);
其實,當執行 c=x; 的時候,C 只是把 x 之中最小的 8 個 bits 定義成 c 的值。 當 x=1025 時,c 得到的位元組 (bit pattern) 是1 -1
所以解釋成 1。當 x=255 時,c 得到的位元組是00000001
所以解釋成 -1。11111111
在前面的實驗中,我們順便看到,不論變數的資料型態是 int、short 還是 char,輸出格式都可以用 %d。
將 double 的值轉換給 int,相當於只取 double 的整數部分。 如果那個數恰好是個整數,就不會有誤差。否則必然會失真。 反之,將 int 的值轉換給 double, 因為雙精度浮點數的底數部分有 52 位 (52 bits),而整數的紀錄範圍大約是 -231 與 231 之間,所以轉換沒有誤差。
float 是單精度浮點數,以前的電腦硬體做浮點數計算的能力較弱時, 經常為了節省時間而採用這種變數型態。不過,如今的電腦都很快速, 記憶體容量一般也不成問題,所以我們乾脆建議不再採用這種變數型態。
習題
![]() |
![]() |
單維彰 (2000/03/24) --- 03/04/24 (單) |