發信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信區: test
標  題: 星星流講座 0004
發信站: ☆清華電機☆ (Tue May  2 22:07:07 1995)
轉信站: star

星星流講座 0004         C 語言教室

第 2 講 之 1            Arithmetic Operations
                        Topic: 數值型態

在 C 語言中,我們表示一個數的方法有兩種。第一種方法就是直接
寫出這個數,我們叫它做立即值 (immediate value),例如 3、5.5
這些都叫做立即值,也就是你可以直接看出值的量 (quantity)。

第二種方法就是設定一個變數 (variable),這個變數儲存了某個值,
我們經由取用這個變數的程序來得到我們要的值。在 C 語言中,每個
變數都具有它自己的資料型態 (data type),這是為什麼呢?

真實世界的數被分成許多的體 (field) 或環 (ring) 或群 (group),
當然,這是像作者這種只學過一點點數學的人的笨分法,學過很多數
學的人就不會這樣兒分了。但是沒有關係,因為電腦也很笨,所以電
腦對於數它只有以下兩種二分法:

第一種分法:有號數和無號數

        有號數就是帶正負號的數,無號數就是不帶正負號的數。

第二種分法:整數和浮點數

        整數就是不帶小數點的數,浮點數就是帶小數點的數。

C 語言為了表示出電腦裡這兩種二分法,所以規定所有的變數都必須
有型態,以便翻譯成機器語言給笨笨的電腦去處理。C 語言對於整數
和浮點數的分法如下所示:

            ┌ 短整數          short  
        整數┼ 普通整數        int
            └ 長整數          long

            ┌ 單精度浮點數    float
      浮點數┼ 倍精度浮點數    double
            └ 加倍精度浮點數  long double

為什麼要把整數和浮點數分成這麼多類呢?這是因為要讓程式設計者
能有更多的選擇。孟子曰:「魚與熊掌,不可得兼」,由於電腦硬體
的限制,如果我們在處理數字時要求比較高的精確度的話,那麼我們
必須花比較大的空間來存這些數字 (因為位數比較多),同時我們也
必須花比較長的時間對這些數作算術運算。所以 C 語言提供了各三
種精確度的整數和浮點數供程式設計師使用。

那麼 C 語言是如何表示有號數和無號數的呢?很簡單,它的做法就是
以 unsigned 和 signed 兩個修飾子 (modifier) 來區別。

那麼在程式中,我要怎麼樣使用及設定數值變數呢?首先你必須記住:
任何變數使用前必須先宣告它的資料型態。例如:

unsigned int a;

就表示我們宣告了一個變數,它的名字叫做 a,它的型態是無號整數。
變數的名字不可以是純數字 (因為會和立即值混淆),不可以含有特殊
符號 (通常除了底線字元 _ 之外都是不允許的),也不可以是保留字
(reserved words)
。保留字就是像 int、float ... 這些在 C 語言中
有特殊意義的字,為了避免混淆當然不可以當作變數啦!

那麼 C 語言有那些保留字呢?請看:

auto            double          int             struct
break           else            long            switch
case            enum            register        typedef
char            extern          return          union
const           float           short           unsigned
continue        for             signed          void
default         goto            sizeof          volatile
do              if              static          while

某些編譯器會增加下面的保留字:

asm             fortran

再來請注意的就是 unsigned 它必須放在宣告的最前面,如果你寫

int unsigned a;

可能會產生錯誤 (當然不是絕對,和你的編譯器有關,不過沒人這樣寫就是了)。
C 語言內定數值型態是有號數,也就是說,你寫

int a;

signed int a;

的意思是相同的。