Linux 版 (精华区)
发信人: netiscpu (夜☆星光点点☆), 信区: Linux
标 题: ◇ 星星流讲座 0006
发信站: 紫 丁 香 (Sun Nov 8 18:22:49 1998), 转信
寄信人: guest.bbs@hgluo.hust.edu.cn
标 题: ◇ 星星流讲座 0006
发信站: 华南理工大学 BBS木棉站
日 期: Thu Feb 20 14:40:06 1997
发信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信区: test
标 题: 星星流讲座 0006
发信站: ☆清华电机☆ (Thu May 4 00:29:37 1995)
;35m第 2 讲 之 3 Arithmetic Operations
Topic: 进阶的运算子和数的值域m
算术运算中我们常常要做的就是指定 (assignment) 的动作,也就是把等
号右边的数值指定给等号左边的数。指定运算子 (assignment operator)
最常用的就是等号 = 。
在 C 语言中,为了方便的因素,增加了许多指定运算子,它们的用法和功能
请看下面的对照表你就很容易可以了解了:
原来的指定运算式 比较简单的指定运算式
a = a + b; a += b;
a = a - b; a -= b;
a = a * b; a *= b;
a = a / b; a /= b;
a = a % b; a %= b;
请注意的是 += 这类符号中 + 和 = 中间是没有空格的。
由於我们在程式中常常会用到像 a = a + 1 或 a = a - 1 这种式子,所以 C
特别提供了两个运算子:递增运算子 (increment operator) ++ 和递减运算子
(decrement operator) --。它们的意义如下:
原来的指定运算式 比较简单的指定运算式
a = a + 1; a++; 或 ++a;
a = a - 1; a--; 或 --a;
你心里也许有个疑问:++ 放前面 (prefix) 和放後面 (postfix) 有什麽不同?
m++a 表示先把 a 加 1,再把 a 丢给取用它的式子; a++ 表示先把 a 丢给
取用它的式子,再把 a 加 10m。我们以後讲解阵列的时候,会以详细的例子
提醒各位这个陷阱。
到目前为止我们已经介绍了基本的数值型态,以及和数值运算相关的运算子,现
在我们来看看如何得知数值型态所能表示的□围:
/* range.c */
#include <stdio.h>
main ()
{
printf ("%d %d %d\n", sizeof (short), sizeof (int), sizeof (long));
printf ("%d %d %d\n", sizeof (float), sizeof (double),\
sizeof (long double));
}
执行结果 (at Sun SPARC 10)
2 4 4
4 8 8
首先说明 sizeof 的意思:sizeof 是一个特别的运算子,它用来传回某个型态一
共占掉了记忆体空间多少 byte。像我们的例子中,short 型态占了 2 bytes,int
型态则占了 4 bytes ..... 等等。值得注意的是,m每种基本的数值资料型态所占
的 byte 数取决於机器的设计,不同的机器、不同的编译器均可能导致不同的结果0m。
我们知道了每种数值资料型态的长度之後,便可以很轻易地求出它的值域了,例如:
型态 长度 (bits) 值域
15 15
signed short 16 -2 ~ +2 - 1 => -32768 ~ +32767
int 32 -214783648 ~ 214783647
unsigned short 16 0 ~ 65535
int 32 0 ~ 4294967295
-38 +38
float 32 ±3.4×10 ~ ±3.4×10
(精确度小数点後 7 位)
-308 +308
double 64 ±1.7×10 ~ ±1.7×10
(精确度小数点後 15 位)
目前几乎所有的编译器和电脑硬体都是支援 IEEE 的浮点数标准,所以浮点数都当
成有号数来处理,无号浮点数是没有意义的。值域的详细求法请参考计算机结构方
面的书籍,这不是我们研究 C 语言的重点所在 ^_^。
在数值运算中,如果给定的数值超过了变数的数值型态所能表示的□围,就会产生
溢位 (Overflow),例如:
short a;
a = 90000; /* overflow */
浮点数运算中,求出来的值太小使得数值不能控制在精确度所能表示的□围,会产
生缺位 (Underflow)。缺位的情形比较少见。
数值运算除了溢位和缺位之外,还有一种常见的运算错误,那就是除以 0 (Divide
by zero)。我们在写程式的时候要仔细考虑数值运算可不可能发生这三种错误,如
果可能那麽必须想办法在程式中消除它,因为这些错误都会触发电脑的硬体产生错
误讯号而直接停掉你的程式,严重的话可能导致当机。
--
本文原作者为徐振家,原作刊载於星星神教总坛 ☆清华电机☆ 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)
页面执行时间:2.632毫秒