📄 00000003.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: <A HREF="mailto:ax.bbs@bbs.ee.nthu.edu.tw.">ax.bbs@bbs.ee.nthu.edu.tw.</A> (athena), 信区: test <BR>标 题: 星星流讲座 0006 <BR>发信站: ☆清华电机☆ (Thu May 4 00:29:37 1995) <BR> <BR> <BR>第 2 讲 之 3 Arithmetic Operations <BR> Topic: 进阶的运算子和数的值域 <BR> <BR>算术运算中我们常常要做的就是指定 (assignment) 的动作,也就是把等 <BR>号右边的数值指定给等号左边的数。指定运算子 (assignment operator) <BR>最常用的就是等号 = 。 <BR> <BR>在 C 语言中,为了方便的因素,增加了许多指定运算子,它们的用法和功能 <BR>请看下面的对照表你就很容易可以了解了: <BR> <BR> 原来的指定运算式 比较简单的指定运算式 <BR> <BR> a = a + b; a += b; <BR> a = a - b; a -= b; <BR> a = a * b; a *= b; <BR> a = a / b; a /= b; <BR> a = a % b; a %= b; <BR> <BR>请注意的是 += 这类符号中 + 和 = 中间是没有空格的。 <BR> <BR>由於我们在程式中常常会用到像 a = a + 1 或 a = a - 1 这种式子,所以 C <BR>特别提供了两个运算子:递增运算子 (increment operator) ++ 和递减运算子 <BR>(decrement operator) --。它们的意义如下: <BR> <BR> 原来的指定运算式 比较简单的指定运算式 <BR> <BR> a = a + 1; a++; 或 ++a; <BR> a = a - 1; a--; 或 --a; <BR> <BR>你心里也许有个疑问:++ 放前面 (prefix) 和放後面 (postfix) 有什麽不同? <BR>++a 表示先把 a 加 1,再把 a 丢给取用它的式子; a++ 表示先把 a 丢给 <BR>取用它的式子,再把 a 加 1。我们以後讲解阵列的时候,会以详细的例子 <BR>提醒各位这个陷阱。 <BR> <BR>到目前为止我们已经介绍了基本的数值型态,以及和数值运算相关的运算子,现 <BR>在我们来看看如何得知数值型态所能表示的□围: <BR> <BR>/* range.c */ <BR> <BR>#include <stdio.h> <BR> <BR>main () <BR>{ <BR> printf ("%d %d %d\n", sizeof (short), sizeof (int), sizeof (long)); <BR> printf ("%d %d %d\n", sizeof (float), sizeof (double),\ <BR> sizeof (long double)); <BR>} <BR> <BR>执行结果 (at Sun SPARC 10) <BR> <BR>2 4 4 <BR>4 8 8 <BR> <BR>首先说明 sizeof 的意思:sizeof 是一个特别的运算子,它用来传回某个型态一 <BR>共占掉了记忆体空间多少 byte。像我们的例子中,short 型态占了 2 bytes,int <BR>型态则占了 4 bytes ..... 等等。值得注意的是,每种基本的数值资料型态所占 <BR>的 byte 数取决於机器的设计,不同的机器、不同的编译器均可能导致不同的结果。 <BR> <BR>我们知道了每种数值资料型态的长度之後,便可以很轻易地求出它的值域了,例如: <BR> <BR> 型态 长度 (bits) 值域 <BR> <BR> 15 15 <BR>signed short 16 -2 ~ +2 - 1 => -32768 ~ +32767 <BR> int 32 -214783648 ~ 214783647 <BR>unsigned short 16 0 ~ 65535 <BR> int 32 0 ~ 4294967295 <BR> <BR> -38 +38 <BR> float 32 ±3.4×10 ~ ±3.4×10 <BR> (精确度小数点後 7 位) <BR> <BR> -308 +308 <BR> double 64 ±1.7×10 ~ ±1.7×10 <BR> (精确度小数点後 15 位) <BR> <BR>目前几乎所有的编译器和电脑硬体都是支援 IEEE 的浮点数标准,所以浮点数都当 <BR>成有号数来处理,无号浮点数是没有意义的。值域的详细求法请参考计算机结构方 <BR>面的书籍,这不是我们研究 C 语言的重点所在 ^_^。 <BR> <BR>在数值运算中,如果给定的数值超过了变数的数值型态所能表示的□围,就会产生 <BR>溢位 (Overflow),例如: <BR> <BR> short a; <BR> a = 90000; /* overflow */ <BR> <BR>浮点数运算中,求出来的值太小使得数值不能控制在精确度所能表示的□围,会产 <BR>生缺位 (Underflow)。缺位的情形比较少见。 <BR> <BR>数值运算除了溢位和缺位之外,还有一种常见的运算错误,那就是除以 0 (Divide <BR>by zero)。我们在写程式的时候要仔细考虑数值运算可不可能发生这三种错误,如 <BR>果可能那麽必须想办法在程式中消除它,因为这些错误都会触发电脑的硬体产生错 <BR>误讯号而直接停掉你的程式,严重的话可能导致当机。 <BR>-- <BR>本文原作者为徐振家,原作刊载於星星神教总坛 ☆清华电机☆ test 板。 <BR>你可以以电子文件的形式将本文自由流传於台湾学术网路,但必须包含此版权声明。 <BR>原作者依中华民国著作权法之规定,享有本文之著作权,请勿抄袭以免触法。 <BR>未经授权任何人不得以任何形式对本文做任何修改及商业上之应用。 <BR>其他网路的转载或其他用途的应用,请先知会作者,并取得其同意。 <BR>对本文有任何疑问或意见请 mail 给 <A HREF="mailto:ax.bbs@bbs.ee.nthu.edu.tw,谢谢。">ax.bbs@bbs.ee.nthu.edu.tw,谢谢。</A> <BR> <BR> <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -