Linux 版 (精华区)

发信人: netiscpu (夜☆星光点点☆), 信区: Linux
标  题: ◇ 星星流讲座 0004
发信站: 紫 丁 香 (Sun Nov  8 18:21:39 1998), 转信


寄信人: guest.bbs@hgluo.hust.edu.cn 
标  题: ◇ 星星流讲座 0004
发信站: 华南理工大学 BBS木棉站
日  期: Thu Feb 20 14:37:57 1997

发信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信区: test
标  题: 星星流讲座 0004
发信站: ☆清华电机☆ (Tue May  2 22:07:07 1995)


;35m第 2 讲 之 1            Arithmetic Operations
                        Topic: 数值型态m

在 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) 来区别。

那麽在程式中,我要怎麽样使用及设定数值变数呢?首先你必须记住:
m任何变数使用前必须先宣告它的资料型态0m。例如:

unsigned int a;

就表示我们宣告了一个变数,它的名字叫做 a,它的型态是无号整数。
m变数的名字不可以是纯数字 (因为会和立即值混淆),不可以含有特殊
符号 (通常除了底线字元 _ 之外都是不允许的),也不可以是保留字
(reserved words)0m。保留字就是像 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;

的意思是相同的。

--
本文原作者为徐振家,原作刊载於星星神教总坛 ☆清华电机☆ test 板。
你可以以电子文件的形式将本文自由流传於台湾学术网路,但必须包含此版权声明。
原作者依中华民国著作权法之规定,享有本文之著作权,请勿抄袭以免触法。
未经授权任何人不得以任何形式对本文做任何修改及商业上之应用。
其他网路的转载或其他用途的应用,请先知会作者,并取得其同意。
对本文有任何疑问或意见请 mail 给 ax.bbs@bbs.ee.nthu.edu.tw,谢谢。


--
m;32m※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: mtlab.hit.edu.cn]
--

                              Enjoy Linux!
                          -----It's FREE!-----

※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.390毫秒