本章导读本章通过 C程序实例分析着手,使读者理解 C语言的基本数据类型的表示形式、存储格式及相关的运算,掌握变量定义的方法及意义,能够灵活运用各种表达式,
为 C语言编程打下基础。
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本书目录第 2章 数据类型及表达式本章主要知识点
(1)基本的数据类型。
(2)常量和变量。
(3) C语言各种运算符和表达式的应用 。
第 2章 数据类型及表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本章导读
2.2 C语言的数据类型
2.3 运算符及表达式
2.1 C语言各种运算符和表达式的应用
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本章目录
2.1 C语言各种运算符和表达式的应用
2,C程序实例 (2)
1,C程序实例 (1)
【 例 2.1】 关于常量,变量及数据类型说明的程序实例 。 程序名为 l2_1.cpp。
#include"stdio.h"
main()
{ int a=3; /*定义整型变量 a并赋予常量值 3 */
short r=6; /*定义短整型变量 r并赋予常量值 6*/
char c='a'; /*定义字符变量 c并赋予字符常量值 'a' */
float pi=3.14; /*定义单精度实型变量 pi并赋予实型常量值 3.14 */
double s; /*定义双精度实型变量 s */
s=pi*r*r; /*将 pi*r*r值赋给 s */
printf("int:%d,short:%d,char:%d,float:%d,double:%d\n",sizeof(a),
sizeof(r),sizeof(c),sizeof(pi),sizeof(s));
/*输出各变量占内存的字节数 */
printf("a=%d,r=%d,c=%c,pi=%f,s=%lf\n",a,r,c,pi,s);
/*输出各变量的值 */
}
2.1.1 C程序实例( 1)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本节目录
1.C程序实例 1
程序结果
[例 2.1]程序结果及分析返回例题 返回本节目录结果分析,变量可以被定义成不同的数据类型并赋值,不同类型的数据在内存中所占的字节数不同,通过 sizeof()求得数据宽度。短整型、整型、字符型、单精度实型、
双精度实型在内存中分别占 2字节,4字节,1字节,4字节和 8字节。同时,这些数据在输出时所使用的输出格式控制符也不相同,分别为 %d,%d,%c,%f和 %lf形式。由此可见,数据表现为常量或变量,数据又具有不同的数据类型,不同数据类型的数据存储格式不同,数据的输出格式控制也不相同。 注意,在 Trubo C环境下,整型数据存储时在内存中占 2字节。
2.1.1 C程序实例( 2)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
2.C程序实例 2
【 例 2.2】 关于运算符和表达式的程序实例 。 /*程序名为 l2_2.cpp。 */
#include"stdio.h"
main()
{ int i=3,a=5,b=7,c,d; /*定义变量并赋初值 */
printf("i=%d\n",i++); /*输出 i++的值 */
printf("i=%d\n",i); /*输出 i的值 */
c=a>b?a:b; /*计算表达式 c=a>b?a:b */
printf("c=%d\n",c); /*输出 c的值 */
d=a<=b&&i; /*计算表达式 d=a<=b&&i */
printf("d=%d\n",d); /*输出 d的值 */
d=(c,d=c); /*计算表达式 d=(c,d=c) */
printf("d=%d\n",d); /*输出 d的值 */
}
返回本节目录程序结果
[例 2.2]程序结果及分析返回例题 返回本节目录结果分析,由结果 i=3 i=4可知 printf("i=%d\n",i++);中 i++的值仍然为 3,而
i的值由 3增 1后变为 4,理解自增运算符 ++的运算方式。 c=a>b?a:b;语句中包括了关系运算符,>”、条件运算符,?:”、赋值运算符,=”,经过各种运算处理后 c的值为 7。 d=a<=b&&i; 语句中包括了关系运算符,<=”、逻辑运算符,&&”、
赋值运算符,=”,经过各种运算处理后 d的值为 1。 d=(c,d=c); 语句中包括了赋值运算符,=”,逗号运算符,,”,经过各种运算处理后 d的值为 7。
2,2 C语言的数据类型
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本节目录单精度实型 (float)
双精度实型 (double)
整型 ( int)
字符型 (char)
枚举类型数组类型结构体类型共用体类型实型基本类型构造类型空类型 (void)
指针类型数据类型
2,2 C语言的数据类型
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
2.2.1 基本数据类型
2.2.2 常量
2.2.3 变量及其类型定义返回本节目录
2.2.1 基本数据类型
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本节目录
1.整型数据
2.实型数据
3.字符型数据
2.2.1 基本数据类型(一)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
1,整型数据整型数据分为一般整型( int)、短整型( short)和长整型
( long),并且每一种类型又分为带符号( signed)和无符号
( unsigned)两种类型 。 整型数据的特性见下表:
返回本节目录数据类型名 说明 Visual C++ 6.0环境 Turbo C2.0环境字节 取值范围 字节 取值范围
short [int] 短整型 2 -32768~32767 2 -32768~32767
signed short [int] 带符号短整型 2 -32768~32767 2 -32768~32767
unsigned short [int] 无符号短整型 2 0~65535 2 0~65535
int 整型 4 -2147483648~2147483647 2 -32768~32767
signed [int] 带符号整型 4 -2147483648~2147483647 2 -32768~32767
unsigned [int] 无符号整型 4 0~4294967295 2 0~65535
long [int] 长整型 4 -2147483648~2147483647 4 -2147483648~2147483647
signed long [int] 带符号长整型 4 -2147483648~2147483647 4 -2147483648~2147483647
unsigned long [int] 无符号长整型 4 0~4294967295 4 0~4294967295
返 回
2.2.1 基本数据类型(二)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
2,实型数据实型数据分为单精度实型( float)、双精度实型( double)和长双精度实型( long double)。具体情况见下表所示,
数据类型名 说明
Visual C++ 6.0环境 Turbo C2.0环境字节 取值范围 有效数字 字节取值范围 有效数字
float 单精度实型 4 -3.4× 1038~3.4× 1038 6~7 4 -3.4× 1038~3.4× 1038 6~7
double 双精度实型 8 -1.7× 10308~1.7× 10308 15~16 8 -1.7× 10308~1.7× 10308 15~16
long
double
长双精度实型
16 -1.2× 104932~1.2× 104932 18~19 10 -1.2× 104932~1.2× 104932 18~19
返 回 返回本节目录
2.2.1 基本数据类型(三)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
3,字符型数据字符型数据分为一般字符型( char)、带符号字符型( signed char)
和无符号字符型( unsigned char)三种类型。具体情况见下表所示,
数据类型名 说明 字节 取值范围
char 字符型 1 -128~127
signed char 带符号字符型 1 -128~127
unsigned char 无符号字符型 1 0~255
返 回 返回本节目录
2.2.2 常量
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
1,整型常量
2.实型常量
3.字符型常量
4.字符串常量返回本节目录
2.2.2 常量(一)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
1,整型常量
( 1)十进制整型常量:以数字 1~9开头,其他位以数字 0~9构成十进制整型常量。如 12,-38等。
( 2)八进制整型常量:以数字 0开头,其他位以数字 0~7构成八进制整型常如 012,-037等。
在 C语言中,整型常量有十进制、八进制、十六进制三种进制表示方法,并且各种数制均可有正( +)负( -)之分,正数的,+”可省略。
( 3)十六进制整型常量:以 0X或 0x开头(数字 0和大写或小写字母
x),其他位以数字 0~9或字母 a~f或 A~F构成十六进制整型常量。
如 0x12,-0Xa9等。
如果在整型常量加上后缀 L或 l表示该常量为长整型常量,加上后缀 U或 u表示无符号整型常量。
返 回 返回本节目录
2.2.2 常量(二)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
2,实型常量
( 1) 小数表示法,它是由数的符号、数字和小数点组成的实型常量
(注意:必须有小数点)。如 -2.5,3.0,4.,.34等都是合法的实型小数形式。
( 2) 科学计数法,科学计数法也称指数法。它是由数的符号、尾数
(整数或小数)、阶码标示( E或 e)、阶符和整数阶码组成的实型常量。尾数不可缺省,阶码必须为整数。如 -2.5E-3,3e5,34E-3等都是合法的指数形式。如 -2.5E-3表示 -2.5× 10-3。
实型常量又称浮型常量。实型常量由整数部分和小数部分组成,
有两种表示形式:小数表示法和科学计数法。它只能用十进制表示。
实型常量分为单精度、双精度和长双精度三种类型。实型常量如果没有任何说明,则表示为双精度常量,实型常量后加上 F或 f则表示单精度常量,实型常量后加上 L或 l则表示长双精度常量。
返 回 返回本节目录
2.2.2 常量(三)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
3,字符型常量
( 1) 一般字符常量,一般字符常量是用单引号括起来的一个普通字符,
其值为该字符的 ASCII代码值。 ASCII编码表见附录 1。
如 ’ a’,’ A’,’ 0’,’?’等都是一般字符常量,但是 ’ a’和 ’ A’是不同的字符常量,’ a’的值为 97,而 ’ A’的值为 65。
字符型常量是由一对单引号括起来的一个字符。它分为一般字符常量和转义字符。一个字符常量在计算机的存储中占据一个字节。
( 2) 转义字符,C语言允许用一种特殊形式的字符常量,它是以反斜杠
( \)开头的特定字符序列,表示 ASCII字符集中控制字符、某些用于功能定义的字符和其他字符。如 ’ \n’表示回车换行符,’ \\’表示字符,\”。常用的转义字符见 1.4.1中所叙。
如果在整型常量加上后缀 L或 l表示该常量为长整型常量,加上后缀 U或 u表示无符号整型常量。
返 回 返回本节目录
( 4)存放的变量不同。字符常量可存放在字符变量或整型变量中,而字符串常量需要存放在字符数组中。字符变量和字符数组后续介绍。
2.2.2 常量(四)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
4,字符串常量字符串常量也称字符串,由一对双引号括起来(“”)的字符序列。
字符序列中的字符个数称字符串长度,没有字符的字符串称为空串。如
,a”、,12+3”等都是合法的字符串常量。字符串常量中的字符是连续存储的,并在最后自动加上字符’ \0’(空字符,该字符在 ASCII码值为 0,也称
NULL字符)作为字符串结束标志。如字符串,a”在计算机内存中占两个连续单元,存储内容为字符’ a’和’ \0’对于字符串常量和字符常量的区别是十分显著的,主要表现在以下 4个方面:
( 1) 表示形式不同。字符常量以单引号表示,而字符串常量以双引号表示。
( 2)存储所占的内存空间不同。字符常量在内存中只用 1个字节存放该字符的 ASCII码值。字符串常量在内存中,除了存储串中的有效字符的 ASCII
码值外,系统还自动在串后加上 1个字节,存放字符串结束标志 ’ \0’。
返 回
( 3)允许的操作不同。字符常量允许在一定范围内与整数进行加法或减法运算,如 ’ a’-32合法。字符串常量不允许上述运算,如,a”-32非法的。
返回本节目录
( 1)数据类型,C语言的合法数据类型。如例中的 int,short,char,float、
double等。
( 2)变量名表:变量名是 C语言合法的标识符。变量名表可以包含多个变量名,彼此之间使用逗号分开,表示同时定义若干个具有相同数据类型的变量,如,float a,b;
( 3)变量定义语句可以出现在变量使用之前的任何位置。程序设计时不违背,先定义,后使用,的原则即可。
2.2.3 变量及类型定义
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
) 返回本节目录
1,变量定义变量定义一般格式,数据类型 变量名表;
如,int a; 对变量定义说明如下:
变量是指在程序执行过程中其值可以被改变的量。变量有三个基本要素:变量名、变量数据类型和变量的值。在 C语言中,任何一个变量在使用之前都必须首先定义它的名字,并说明它的数据类型。也就是说,
变量使用前必须先定义,即指定变量名,说明变量数据类型。 变量定义的实质是按照变量说明的数据类型为变量分配相应空间的存储单元,在该存储单元中存放变量的值。 C语言中,变量使用时遵循,先定义,后使用,的原则。
2.2.3 变量及类型定义
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本节目录
2,变量初始化及赋值在 【 例 2.1】 中,s=pi*r*r;”语句是通过赋值运算符,=”将
,pi*r*r”的值赋给变量 s,即该语句实现了给变量 s的赋值。所以,变量值可以通过初始化取得,也可以在定义后,通过给变量赋值的方法取得。
在 【 例 2.1】 中,int a=3;short r=6; char c='a'; float
pi=3.14;,的,=”是赋值运算符,用来给变量赋值。所以,以上四条语句都是在定义变量的同时给变量赋了值,称为变量的初始化。变量初始化是指定义变量同时,给变量一个初始值。
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
2.3.2 算术运算符及算术表达式
2.3.1 运算符和表达式
2.3 运算符及表达式返回本章目录
2.3.3 关系运算符及关系表达式
2.3.4 逻辑运算符及逻辑表达式
2.3.5 条件运算符及条件表达式
2.3.6 赋值运算符及赋值表达式
2.3.7 逗号运算符及逗号表达式
2.3.8 求字节运算符
2.3.9 类型转换分类名称 运算符算术运算符 +,-,*,/,%,++,--
关系运算符 <,<=,>,>=,==,!=
逻辑运算符 &&,||,!
位运算符 <<,>>,~,|,^,&
赋值运算符 =及其扩展赋值运算符条件运算符?,
逗号运算符,
指针运算符 *,&
求字节数运算符 sizeof
强制类型转换运算符 (类型 )
分量运算符,,->
下标运算符 [ ]
其他 函数运算符 ( )
2.3.1 运算符和表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
这里介绍运算符和表达式的概念以及运算符的优先级和结合性问题。
1.运算符返回本节目录
C语言提供了 13类,共计 34种运算符 。 据运算符的运算对象的个数,C
语言的运算符分为单目运算符,双目运算符和三目运算符,如单目 ++,双目 <,三目?:等 。 运算符具体分类情况见下表所示 。
2.3.1 运算符和表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
2.表达式
3.运算符的优先级
4.运算符的结合性返回本节目录用运算符将操作对象连接起来,符合 C语法规则的式子称为表达式 。
表达式因运算符种类也可分为各种表达式,如算术表达式,关系表达式,
赋值表达式等,每一个表达式也都具有一定的值 。 如,a=b+c
运算符的优先级是指不同的运算符在表达式中进行运算的先后次序 。 如,
算术运算符 *,/的优先级高于 +,-的优先级 。 在 【 例 2.2】 中,c=a>b?a:b;”
语句中运算符按优先级由高到低排列顺序为,>”,,?:”,,=”。
当一个运算对象的两侧的运算符的优先级相同时,运算的结合方向称为结合性 。 运算符的结合性分为左结合和右结合两种 。 在 C语言中,运算对象先与左面的运算符结合称左结合,如 +,-,*,/的结合方向为自左向右;
运算对象先与右面的运算符结合称右结合,如单目运算符 ++,--的结合方向是自右向左 。
2.3.2 算术运算符及算术表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
算术运算符分基本算术运算符和自增、自减运算符。
1.基本算术运算符基本算术运算符包括加法( +)、减法( -)、乘法( *)、除法( /)
和求余( %)。后三种运算符优先级高于前两种,它们都是左结合性。对于运算符 /和 %有如下说明:
( 1)若除法运算符的运算对象均为整型数据,则结果为其商的整数部分,
舍去小数部分。如 13/7的结果为 1。若运算对象中有一个为负值,则舍入的方向是不固定的。如,-13/7在有的机器上得到结果是 -1,有的机器上得到结果是 -2,但多数机器采取,向零取整,方法,即 13/7=1,-
13/7=-1,取整后向零靠拢。
返回本节目录
( 2)求余运算符的运算对象必须是整型数据,运算结果的符号与被除数的符号相同,如,-13%7运算结果为 -6,13%-7运算结果为 6,-13%-7运算结果为 -6 。
2.3.2 算术运算符及算术表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
2.自增、自减运算符自增 (++)和自减 (--)运算符是单目运算符,其功能是使运算对象(变量)的值增 1或减 1。它们既可以作前缀运算符(位于运算对象的前面),
如 ++i,--i;也可以作后缀运算符(位于运算对象的后面),如 i ++,i
--。前缀和后缀运算的数据处理方法有明显的差异。对于前缀形式表示在用该表达式之前先使变量值增(减) 1;对于后缀形式表示在用该表达式的值之后使 n的值增(减) 1。 ++j,--j 在使用 j之前,先使 j的值加
(减 )1。 j++,j— 在使用 j之后,使 j的值加 (减 )1。
在 【 例 2.2】 中,int i=3;printf("i=%d\n",i++);”,i++是后缀形式,
则先计算表达式的值,其值为当前 i值,因此,输出 i=3,然后使 i自增 1,i
值为 4。所以,语句,printf("i=%d\n",i);”输出的结果是 i=4。
返回本节目录自增或自减运算符在使用时,需要注意以下几点:
( 1)运算符的操作对象,只能是变量,而不能作用于常量或表达式。
运算符的优先级高于基本算术运算符,结合性是,自右向左,右结合。
( 2) i++,遵照右结合原则,它相当于 -( i ++),而不相当于 (-i)++形式。
2.3.3 关系运算符及关系表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
关系运算符是对两个操作对象进行大小比较的运算符,是逻辑运算的一种简单形式。用关系运算符将两个表达式连接起来的符合 C语法规则的式子称为关系表达式。关系表达式的运算结果是一个逻辑值,即,真,
或,假,。在 C语言中关系运算结果为真,以整数,1”表示,结果为假,
以整数,0”表示。
C语言中的关系运算符共有六种,它们是:
> < >= <= != ==
大于 小于 大于等于 小于等于 不等于 等于关系运算符的优先级低于算术运算符的优先级,且等于( ==)和不等于( !=)的优先级低于另外四种运算符的优先级。关系运算符的结合性是左结合性。
在 【 例 2.2】 实例,int a=5,b=7;”和,c=a>b?a:b; d=a<=b&&i;”中
a>b值为 0,a<=b值为 1。
返回本节目录
2.3.4 逻辑运算符及逻辑表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本节目录参与逻辑运算的逻辑量,真,或,假,的判断原则是:以 0代表
,假,,以非 0代表,真,。即将一个非零的数值认作,真,,将零值认作,假,。逻辑运算的结果逻辑值只有两个,,真,和,假,,它们分别用,1”和,0”表示。
C语言中提供的三种逻辑运算符及运算法则见下表所示:
逻辑运算符中,&&”和,||”低于关系运算符,,!,高于算术运算符。
在 【 例 2.2】 程序实例中,d=a<=b&&i;”先计算,a<=b”为真值为 1,
再计算,1&&i”,两个操作对象均非零为,真,,故结果为,真,,值为
1。再将该值 1赋给变量 d。
在处理逻辑表达式时应注意以下几点:
运算符 运算名称 运算法则 结合性
&& 逻辑与 当两个操作对象都为“真”时,运算结果为“真”,其他情况运算结果都为“假”。 左结合
|| 逻辑或 只有当两个操作对象都为“假”,运算结果才为,假”,其他情况运算结果都为“真”。 左结合
! 逻辑非 当操作对象为“真”时,运算结果为“假”;当操作 对象为“假”时,运算结果为“真”。 右结合
2.3.4 逻辑运算符及逻辑表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本节目录在处理逻辑表达式时应注意以下两点:
( 1) C语言编译系统在给出逻辑运算结果时,以 0代表,假,,以 1代表
,真,。但在判断一个逻辑量,真假,时,以非 0表示,真,,以 0表示
,假,。例如:当 a=5.4,b=5,c=’a’时,!a,!b,!c的值均为,假,,即为 0。 a&&c的值为 1,因为 x和 y均为非 0。
( 2)在进行逻辑运算时,逻辑表达式运算到其值完全确定时为止。例如:
运算表达式 (a=3)&&(a==5)&&(a=6)时,由于 a=3之后运算 a==5的值为假,
所以就不再进行 a=6的运算了,因此 a的值仍为 3,而整个逻辑表达式的值为 0。
使用条件表达式时,应注意以下两点:
( 1)条件运算符优先级高于赋值运算符。如 a=b>0?b:-b;相当于
y=( b>0?b:-b),功能是将 b的绝对值赋给 a。
( 2)条件运算符结合性是右结合。如 b>0?1:b<0?-1:0;相当于 b>0?1:
( b<0?-1:0)。
2.3.5 条件运算符及条件表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
条件运算符是,?:”,是 C语言中唯一的三目运算符,用条件运算符将两个表达式连接起来的符合 C语法规则的式子称为条件表达式。 条件表达式的一般形式:
表达式 1?表达式 2:表达式 3 ;
操作过程,先计算表达式 1的值,若为,真,,则计算表达式 2的值,整个条件表达式的值就是表达式 2的值;若表达式 1的值为,假,,则计算表达式 3,整个条件表达式的值就是表达式 3的值。
条件运算符优先级低于逻辑运算符,其结合性是右结合。
在 【 例 2.2】 程序实例中,a=5,b=7; c=a>b?a:b”,先计算 a>b值为假,
则条件表达式值取 b的值为 7。因此,c值为 7。
返回本节目录
C语言允许在赋值运算符,=”之前加上其他运算符,构成复合运算符。
在,=”之前加上算术运算符,则构成算术复合赋值运算符;在,=”之前加上位运算符,则构成位复合赋值运算符。象 +=,-=,*=等。使用如,
a+=b-c等价于 a=a+(b-c),a%=b-c等价于 a=a%(b-c)。
2.3.6 赋值运算符及赋值表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
赋值运算符包括简单赋值运算符和复合赋值运算符,复合赋值运算符又包括算术复合赋值运算和位复合赋值运算符(位运算在第 8章介绍)。
由赋值运算符将操作对象连接起来符合 C语法规则的式子称为赋值表达式。
1.简单赋值运算符及其表达式
2.简单赋值运算符及其表达式赋值运算符是,=”,其作用是将赋值运算符右侧的表达式的值赋给其左侧的变量。在 【 例 2.2】 程序实例中,i=3,a=5,b=7; c=a>b?a:b;
d=a<=b&&I; d=(c,d=c);,都是将,=”右侧的数值或表达式的值赋给
,=”左侧的变量。赋值运算符的优先级低于条件运算符,其结合性是右结合。如,a=b=c=a>b?a:b;相当于 a=( b=( c=( a>b?a:b)));
值得注意的是:赋值运算符运算对象中的左侧对象一定是变量。如:
a=b-c=5;相当于 a=(( b-c) =5) ;,由于表达式中出现将数值 5赋给 b-c表达式,因此,该表达式是非法的。
返回本节目录
2.3.7 逗号运算符及逗号表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
逗号运算符是,,”,它的优先级低于赋值运算符,是左结合性。用逗号运算符将若干个表达式连接成一个逗号表达式。一般形式如下:
表达式 1,表达式 2,…… 表达式 n
逗号表达式的操作过程是:先计算表达式 1,再计算表达式 2,……,
最后再计算机表达式 n,而逗号表达式的值为最右边表达式 n的值。
如,a=4.5,b=6.4,34.5-20.1,a-b
该逗号运算表达式,它由四个表达式结合而成,从左向右依次计算,
逗号表达式的值为 a-b的值,即 -1.9。
在 【 例 2.2】 程序实例中,d=(c,d=c);”是将逗号表达式 c,d=c的值赋给变量 d。
值得注意的是,逗号运算符是 C语言所有运算符中优先级最低。如:
a=10,20;不同于 a=(10,20);,前者 a的值为 10,表达式的值为 20,后者 a
的值为 20,表达式的值也为 20。
返回本节目录
2.3.8 求字节运算符
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
C求字节运算符是 sizeof,它用于计算变量或某种类型的量在内存中所占的字节数。用法有两种,
1.sizeof 表达式
2.sizeof(类型名)
功能是计算出表达式计算结果所占用内存的字节数。如:在 【 例 2.1】
程序实例中
,printf(”int:%d,short:%d,char:%d,float:%d,double:%d\n“,sizeof(
a),sizeof(r),sizeof(c),sizeof(pi),sizeof(s));,就是输出变量
a,r,c,pi,s所占的内存字节数。
功能是计算出某种类型的量存储时所占用内存的字节数。如:
sizeof(float)计算单精度实型数据在内存中所占的字节数,结果为 4。
返回本节目录强制类型转换是指通过强制类型转换运算符,将表达式的类型强制转换为所指定的类型。强制类型转换的一般形式为:
(数据类型)操作数 或 数据类型(操作数)
功能是将操作数的值强制转换成指定的数据类型。如,int(120.4*7)
是将 120.4*7值转换成 int型数据,表达式的值为 842。
值得注意的是,数据类型转换是对操作数的值进行转换,并不改变操作数中变量本身的数据类型。
2.3.9 类型转换
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
整型、单精度、双精度及字符型数据可以进行混合运算。当表达式中的数据类型不一致时,首先转换为同一类型,然后再进行运算。 C语言有两种方法实现类型转换:一是自动类型转换,另一是强制类型转换。
1.自动类型转换
2.强制类型转换
C编译系统自动完成,
转换方向见右图所示 。
返回本节目录
char,short float
int unsigned unsigned
long
long double long double
低 高类型转换过程中,当数据类型由低向高转换时,数据精度不会受到损失;而数据类型由高到低的转换,此时,数据精度会受到损失。
为 C语言编程打下基础。
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本书目录第 2章 数据类型及表达式本章主要知识点
(1)基本的数据类型。
(2)常量和变量。
(3) C语言各种运算符和表达式的应用 。
第 2章 数据类型及表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本章导读
2.2 C语言的数据类型
2.3 运算符及表达式
2.1 C语言各种运算符和表达式的应用
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本章目录
2.1 C语言各种运算符和表达式的应用
2,C程序实例 (2)
1,C程序实例 (1)
【 例 2.1】 关于常量,变量及数据类型说明的程序实例 。 程序名为 l2_1.cpp。
#include"stdio.h"
main()
{ int a=3; /*定义整型变量 a并赋予常量值 3 */
short r=6; /*定义短整型变量 r并赋予常量值 6*/
char c='a'; /*定义字符变量 c并赋予字符常量值 'a' */
float pi=3.14; /*定义单精度实型变量 pi并赋予实型常量值 3.14 */
double s; /*定义双精度实型变量 s */
s=pi*r*r; /*将 pi*r*r值赋给 s */
printf("int:%d,short:%d,char:%d,float:%d,double:%d\n",sizeof(a),
sizeof(r),sizeof(c),sizeof(pi),sizeof(s));
/*输出各变量占内存的字节数 */
printf("a=%d,r=%d,c=%c,pi=%f,s=%lf\n",a,r,c,pi,s);
/*输出各变量的值 */
}
2.1.1 C程序实例( 1)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本节目录
1.C程序实例 1
程序结果
[例 2.1]程序结果及分析返回例题 返回本节目录结果分析,变量可以被定义成不同的数据类型并赋值,不同类型的数据在内存中所占的字节数不同,通过 sizeof()求得数据宽度。短整型、整型、字符型、单精度实型、
双精度实型在内存中分别占 2字节,4字节,1字节,4字节和 8字节。同时,这些数据在输出时所使用的输出格式控制符也不相同,分别为 %d,%d,%c,%f和 %lf形式。由此可见,数据表现为常量或变量,数据又具有不同的数据类型,不同数据类型的数据存储格式不同,数据的输出格式控制也不相同。 注意,在 Trubo C环境下,整型数据存储时在内存中占 2字节。
2.1.1 C程序实例( 2)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
2.C程序实例 2
【 例 2.2】 关于运算符和表达式的程序实例 。 /*程序名为 l2_2.cpp。 */
#include"stdio.h"
main()
{ int i=3,a=5,b=7,c,d; /*定义变量并赋初值 */
printf("i=%d\n",i++); /*输出 i++的值 */
printf("i=%d\n",i); /*输出 i的值 */
c=a>b?a:b; /*计算表达式 c=a>b?a:b */
printf("c=%d\n",c); /*输出 c的值 */
d=a<=b&&i; /*计算表达式 d=a<=b&&i */
printf("d=%d\n",d); /*输出 d的值 */
d=(c,d=c); /*计算表达式 d=(c,d=c) */
printf("d=%d\n",d); /*输出 d的值 */
}
返回本节目录程序结果
[例 2.2]程序结果及分析返回例题 返回本节目录结果分析,由结果 i=3 i=4可知 printf("i=%d\n",i++);中 i++的值仍然为 3,而
i的值由 3增 1后变为 4,理解自增运算符 ++的运算方式。 c=a>b?a:b;语句中包括了关系运算符,>”、条件运算符,?:”、赋值运算符,=”,经过各种运算处理后 c的值为 7。 d=a<=b&&i; 语句中包括了关系运算符,<=”、逻辑运算符,&&”、
赋值运算符,=”,经过各种运算处理后 d的值为 1。 d=(c,d=c); 语句中包括了赋值运算符,=”,逗号运算符,,”,经过各种运算处理后 d的值为 7。
2,2 C语言的数据类型
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本节目录单精度实型 (float)
双精度实型 (double)
整型 ( int)
字符型 (char)
枚举类型数组类型结构体类型共用体类型实型基本类型构造类型空类型 (void)
指针类型数据类型
2,2 C语言的数据类型
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
2.2.1 基本数据类型
2.2.2 常量
2.2.3 变量及其类型定义返回本节目录
2.2.1 基本数据类型
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本节目录
1.整型数据
2.实型数据
3.字符型数据
2.2.1 基本数据类型(一)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
1,整型数据整型数据分为一般整型( int)、短整型( short)和长整型
( long),并且每一种类型又分为带符号( signed)和无符号
( unsigned)两种类型 。 整型数据的特性见下表:
返回本节目录数据类型名 说明 Visual C++ 6.0环境 Turbo C2.0环境字节 取值范围 字节 取值范围
short [int] 短整型 2 -32768~32767 2 -32768~32767
signed short [int] 带符号短整型 2 -32768~32767 2 -32768~32767
unsigned short [int] 无符号短整型 2 0~65535 2 0~65535
int 整型 4 -2147483648~2147483647 2 -32768~32767
signed [int] 带符号整型 4 -2147483648~2147483647 2 -32768~32767
unsigned [int] 无符号整型 4 0~4294967295 2 0~65535
long [int] 长整型 4 -2147483648~2147483647 4 -2147483648~2147483647
signed long [int] 带符号长整型 4 -2147483648~2147483647 4 -2147483648~2147483647
unsigned long [int] 无符号长整型 4 0~4294967295 4 0~4294967295
返 回
2.2.1 基本数据类型(二)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
2,实型数据实型数据分为单精度实型( float)、双精度实型( double)和长双精度实型( long double)。具体情况见下表所示,
数据类型名 说明
Visual C++ 6.0环境 Turbo C2.0环境字节 取值范围 有效数字 字节取值范围 有效数字
float 单精度实型 4 -3.4× 1038~3.4× 1038 6~7 4 -3.4× 1038~3.4× 1038 6~7
double 双精度实型 8 -1.7× 10308~1.7× 10308 15~16 8 -1.7× 10308~1.7× 10308 15~16
long
double
长双精度实型
16 -1.2× 104932~1.2× 104932 18~19 10 -1.2× 104932~1.2× 104932 18~19
返 回 返回本节目录
2.2.1 基本数据类型(三)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
3,字符型数据字符型数据分为一般字符型( char)、带符号字符型( signed char)
和无符号字符型( unsigned char)三种类型。具体情况见下表所示,
数据类型名 说明 字节 取值范围
char 字符型 1 -128~127
signed char 带符号字符型 1 -128~127
unsigned char 无符号字符型 1 0~255
返 回 返回本节目录
2.2.2 常量
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
1,整型常量
2.实型常量
3.字符型常量
4.字符串常量返回本节目录
2.2.2 常量(一)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
1,整型常量
( 1)十进制整型常量:以数字 1~9开头,其他位以数字 0~9构成十进制整型常量。如 12,-38等。
( 2)八进制整型常量:以数字 0开头,其他位以数字 0~7构成八进制整型常如 012,-037等。
在 C语言中,整型常量有十进制、八进制、十六进制三种进制表示方法,并且各种数制均可有正( +)负( -)之分,正数的,+”可省略。
( 3)十六进制整型常量:以 0X或 0x开头(数字 0和大写或小写字母
x),其他位以数字 0~9或字母 a~f或 A~F构成十六进制整型常量。
如 0x12,-0Xa9等。
如果在整型常量加上后缀 L或 l表示该常量为长整型常量,加上后缀 U或 u表示无符号整型常量。
返 回 返回本节目录
2.2.2 常量(二)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
2,实型常量
( 1) 小数表示法,它是由数的符号、数字和小数点组成的实型常量
(注意:必须有小数点)。如 -2.5,3.0,4.,.34等都是合法的实型小数形式。
( 2) 科学计数法,科学计数法也称指数法。它是由数的符号、尾数
(整数或小数)、阶码标示( E或 e)、阶符和整数阶码组成的实型常量。尾数不可缺省,阶码必须为整数。如 -2.5E-3,3e5,34E-3等都是合法的指数形式。如 -2.5E-3表示 -2.5× 10-3。
实型常量又称浮型常量。实型常量由整数部分和小数部分组成,
有两种表示形式:小数表示法和科学计数法。它只能用十进制表示。
实型常量分为单精度、双精度和长双精度三种类型。实型常量如果没有任何说明,则表示为双精度常量,实型常量后加上 F或 f则表示单精度常量,实型常量后加上 L或 l则表示长双精度常量。
返 回 返回本节目录
2.2.2 常量(三)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
3,字符型常量
( 1) 一般字符常量,一般字符常量是用单引号括起来的一个普通字符,
其值为该字符的 ASCII代码值。 ASCII编码表见附录 1。
如 ’ a’,’ A’,’ 0’,’?’等都是一般字符常量,但是 ’ a’和 ’ A’是不同的字符常量,’ a’的值为 97,而 ’ A’的值为 65。
字符型常量是由一对单引号括起来的一个字符。它分为一般字符常量和转义字符。一个字符常量在计算机的存储中占据一个字节。
( 2) 转义字符,C语言允许用一种特殊形式的字符常量,它是以反斜杠
( \)开头的特定字符序列,表示 ASCII字符集中控制字符、某些用于功能定义的字符和其他字符。如 ’ \n’表示回车换行符,’ \\’表示字符,\”。常用的转义字符见 1.4.1中所叙。
如果在整型常量加上后缀 L或 l表示该常量为长整型常量,加上后缀 U或 u表示无符号整型常量。
返 回 返回本节目录
( 4)存放的变量不同。字符常量可存放在字符变量或整型变量中,而字符串常量需要存放在字符数组中。字符变量和字符数组后续介绍。
2.2.2 常量(四)
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
4,字符串常量字符串常量也称字符串,由一对双引号括起来(“”)的字符序列。
字符序列中的字符个数称字符串长度,没有字符的字符串称为空串。如
,a”、,12+3”等都是合法的字符串常量。字符串常量中的字符是连续存储的,并在最后自动加上字符’ \0’(空字符,该字符在 ASCII码值为 0,也称
NULL字符)作为字符串结束标志。如字符串,a”在计算机内存中占两个连续单元,存储内容为字符’ a’和’ \0’对于字符串常量和字符常量的区别是十分显著的,主要表现在以下 4个方面:
( 1) 表示形式不同。字符常量以单引号表示,而字符串常量以双引号表示。
( 2)存储所占的内存空间不同。字符常量在内存中只用 1个字节存放该字符的 ASCII码值。字符串常量在内存中,除了存储串中的有效字符的 ASCII
码值外,系统还自动在串后加上 1个字节,存放字符串结束标志 ’ \0’。
返 回
( 3)允许的操作不同。字符常量允许在一定范围内与整数进行加法或减法运算,如 ’ a’-32合法。字符串常量不允许上述运算,如,a”-32非法的。
返回本节目录
( 1)数据类型,C语言的合法数据类型。如例中的 int,short,char,float、
double等。
( 2)变量名表:变量名是 C语言合法的标识符。变量名表可以包含多个变量名,彼此之间使用逗号分开,表示同时定义若干个具有相同数据类型的变量,如,float a,b;
( 3)变量定义语句可以出现在变量使用之前的任何位置。程序设计时不违背,先定义,后使用,的原则即可。
2.2.3 变量及类型定义
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
) 返回本节目录
1,变量定义变量定义一般格式,数据类型 变量名表;
如,int a; 对变量定义说明如下:
变量是指在程序执行过程中其值可以被改变的量。变量有三个基本要素:变量名、变量数据类型和变量的值。在 C语言中,任何一个变量在使用之前都必须首先定义它的名字,并说明它的数据类型。也就是说,
变量使用前必须先定义,即指定变量名,说明变量数据类型。 变量定义的实质是按照变量说明的数据类型为变量分配相应空间的存储单元,在该存储单元中存放变量的值。 C语言中,变量使用时遵循,先定义,后使用,的原则。
2.2.3 变量及类型定义
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本节目录
2,变量初始化及赋值在 【 例 2.1】 中,s=pi*r*r;”语句是通过赋值运算符,=”将
,pi*r*r”的值赋给变量 s,即该语句实现了给变量 s的赋值。所以,变量值可以通过初始化取得,也可以在定义后,通过给变量赋值的方法取得。
在 【 例 2.1】 中,int a=3;short r=6; char c='a'; float
pi=3.14;,的,=”是赋值运算符,用来给变量赋值。所以,以上四条语句都是在定义变量的同时给变量赋了值,称为变量的初始化。变量初始化是指定义变量同时,给变量一个初始值。
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
2.3.2 算术运算符及算术表达式
2.3.1 运算符和表达式
2.3 运算符及表达式返回本章目录
2.3.3 关系运算符及关系表达式
2.3.4 逻辑运算符及逻辑表达式
2.3.5 条件运算符及条件表达式
2.3.6 赋值运算符及赋值表达式
2.3.7 逗号运算符及逗号表达式
2.3.8 求字节运算符
2.3.9 类型转换分类名称 运算符算术运算符 +,-,*,/,%,++,--
关系运算符 <,<=,>,>=,==,!=
逻辑运算符 &&,||,!
位运算符 <<,>>,~,|,^,&
赋值运算符 =及其扩展赋值运算符条件运算符?,
逗号运算符,
指针运算符 *,&
求字节数运算符 sizeof
强制类型转换运算符 (类型 )
分量运算符,,->
下标运算符 [ ]
其他 函数运算符 ( )
2.3.1 运算符和表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
这里介绍运算符和表达式的概念以及运算符的优先级和结合性问题。
1.运算符返回本节目录
C语言提供了 13类,共计 34种运算符 。 据运算符的运算对象的个数,C
语言的运算符分为单目运算符,双目运算符和三目运算符,如单目 ++,双目 <,三目?:等 。 运算符具体分类情况见下表所示 。
2.3.1 运算符和表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
2.表达式
3.运算符的优先级
4.运算符的结合性返回本节目录用运算符将操作对象连接起来,符合 C语法规则的式子称为表达式 。
表达式因运算符种类也可分为各种表达式,如算术表达式,关系表达式,
赋值表达式等,每一个表达式也都具有一定的值 。 如,a=b+c
运算符的优先级是指不同的运算符在表达式中进行运算的先后次序 。 如,
算术运算符 *,/的优先级高于 +,-的优先级 。 在 【 例 2.2】 中,c=a>b?a:b;”
语句中运算符按优先级由高到低排列顺序为,>”,,?:”,,=”。
当一个运算对象的两侧的运算符的优先级相同时,运算的结合方向称为结合性 。 运算符的结合性分为左结合和右结合两种 。 在 C语言中,运算对象先与左面的运算符结合称左结合,如 +,-,*,/的结合方向为自左向右;
运算对象先与右面的运算符结合称右结合,如单目运算符 ++,--的结合方向是自右向左 。
2.3.2 算术运算符及算术表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
算术运算符分基本算术运算符和自增、自减运算符。
1.基本算术运算符基本算术运算符包括加法( +)、减法( -)、乘法( *)、除法( /)
和求余( %)。后三种运算符优先级高于前两种,它们都是左结合性。对于运算符 /和 %有如下说明:
( 1)若除法运算符的运算对象均为整型数据,则结果为其商的整数部分,
舍去小数部分。如 13/7的结果为 1。若运算对象中有一个为负值,则舍入的方向是不固定的。如,-13/7在有的机器上得到结果是 -1,有的机器上得到结果是 -2,但多数机器采取,向零取整,方法,即 13/7=1,-
13/7=-1,取整后向零靠拢。
返回本节目录
( 2)求余运算符的运算对象必须是整型数据,运算结果的符号与被除数的符号相同,如,-13%7运算结果为 -6,13%-7运算结果为 6,-13%-7运算结果为 -6 。
2.3.2 算术运算符及算术表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
2.自增、自减运算符自增 (++)和自减 (--)运算符是单目运算符,其功能是使运算对象(变量)的值增 1或减 1。它们既可以作前缀运算符(位于运算对象的前面),
如 ++i,--i;也可以作后缀运算符(位于运算对象的后面),如 i ++,i
--。前缀和后缀运算的数据处理方法有明显的差异。对于前缀形式表示在用该表达式之前先使变量值增(减) 1;对于后缀形式表示在用该表达式的值之后使 n的值增(减) 1。 ++j,--j 在使用 j之前,先使 j的值加
(减 )1。 j++,j— 在使用 j之后,使 j的值加 (减 )1。
在 【 例 2.2】 中,int i=3;printf("i=%d\n",i++);”,i++是后缀形式,
则先计算表达式的值,其值为当前 i值,因此,输出 i=3,然后使 i自增 1,i
值为 4。所以,语句,printf("i=%d\n",i);”输出的结果是 i=4。
返回本节目录自增或自减运算符在使用时,需要注意以下几点:
( 1)运算符的操作对象,只能是变量,而不能作用于常量或表达式。
运算符的优先级高于基本算术运算符,结合性是,自右向左,右结合。
( 2) i++,遵照右结合原则,它相当于 -( i ++),而不相当于 (-i)++形式。
2.3.3 关系运算符及关系表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
关系运算符是对两个操作对象进行大小比较的运算符,是逻辑运算的一种简单形式。用关系运算符将两个表达式连接起来的符合 C语法规则的式子称为关系表达式。关系表达式的运算结果是一个逻辑值,即,真,
或,假,。在 C语言中关系运算结果为真,以整数,1”表示,结果为假,
以整数,0”表示。
C语言中的关系运算符共有六种,它们是:
> < >= <= != ==
大于 小于 大于等于 小于等于 不等于 等于关系运算符的优先级低于算术运算符的优先级,且等于( ==)和不等于( !=)的优先级低于另外四种运算符的优先级。关系运算符的结合性是左结合性。
在 【 例 2.2】 实例,int a=5,b=7;”和,c=a>b?a:b; d=a<=b&&i;”中
a>b值为 0,a<=b值为 1。
返回本节目录
2.3.4 逻辑运算符及逻辑表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本节目录参与逻辑运算的逻辑量,真,或,假,的判断原则是:以 0代表
,假,,以非 0代表,真,。即将一个非零的数值认作,真,,将零值认作,假,。逻辑运算的结果逻辑值只有两个,,真,和,假,,它们分别用,1”和,0”表示。
C语言中提供的三种逻辑运算符及运算法则见下表所示:
逻辑运算符中,&&”和,||”低于关系运算符,,!,高于算术运算符。
在 【 例 2.2】 程序实例中,d=a<=b&&i;”先计算,a<=b”为真值为 1,
再计算,1&&i”,两个操作对象均非零为,真,,故结果为,真,,值为
1。再将该值 1赋给变量 d。
在处理逻辑表达式时应注意以下几点:
运算符 运算名称 运算法则 结合性
&& 逻辑与 当两个操作对象都为“真”时,运算结果为“真”,其他情况运算结果都为“假”。 左结合
|| 逻辑或 只有当两个操作对象都为“假”,运算结果才为,假”,其他情况运算结果都为“真”。 左结合
! 逻辑非 当操作对象为“真”时,运算结果为“假”;当操作 对象为“假”时,运算结果为“真”。 右结合
2.3.4 逻辑运算符及逻辑表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
返回本节目录在处理逻辑表达式时应注意以下两点:
( 1) C语言编译系统在给出逻辑运算结果时,以 0代表,假,,以 1代表
,真,。但在判断一个逻辑量,真假,时,以非 0表示,真,,以 0表示
,假,。例如:当 a=5.4,b=5,c=’a’时,!a,!b,!c的值均为,假,,即为 0。 a&&c的值为 1,因为 x和 y均为非 0。
( 2)在进行逻辑运算时,逻辑表达式运算到其值完全确定时为止。例如:
运算表达式 (a=3)&&(a==5)&&(a=6)时,由于 a=3之后运算 a==5的值为假,
所以就不再进行 a=6的运算了,因此 a的值仍为 3,而整个逻辑表达式的值为 0。
使用条件表达式时,应注意以下两点:
( 1)条件运算符优先级高于赋值运算符。如 a=b>0?b:-b;相当于
y=( b>0?b:-b),功能是将 b的绝对值赋给 a。
( 2)条件运算符结合性是右结合。如 b>0?1:b<0?-1:0;相当于 b>0?1:
( b<0?-1:0)。
2.3.5 条件运算符及条件表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
条件运算符是,?:”,是 C语言中唯一的三目运算符,用条件运算符将两个表达式连接起来的符合 C语法规则的式子称为条件表达式。 条件表达式的一般形式:
表达式 1?表达式 2:表达式 3 ;
操作过程,先计算表达式 1的值,若为,真,,则计算表达式 2的值,整个条件表达式的值就是表达式 2的值;若表达式 1的值为,假,,则计算表达式 3,整个条件表达式的值就是表达式 3的值。
条件运算符优先级低于逻辑运算符,其结合性是右结合。
在 【 例 2.2】 程序实例中,a=5,b=7; c=a>b?a:b”,先计算 a>b值为假,
则条件表达式值取 b的值为 7。因此,c值为 7。
返回本节目录
C语言允许在赋值运算符,=”之前加上其他运算符,构成复合运算符。
在,=”之前加上算术运算符,则构成算术复合赋值运算符;在,=”之前加上位运算符,则构成位复合赋值运算符。象 +=,-=,*=等。使用如,
a+=b-c等价于 a=a+(b-c),a%=b-c等价于 a=a%(b-c)。
2.3.6 赋值运算符及赋值表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
赋值运算符包括简单赋值运算符和复合赋值运算符,复合赋值运算符又包括算术复合赋值运算和位复合赋值运算符(位运算在第 8章介绍)。
由赋值运算符将操作对象连接起来符合 C语法规则的式子称为赋值表达式。
1.简单赋值运算符及其表达式
2.简单赋值运算符及其表达式赋值运算符是,=”,其作用是将赋值运算符右侧的表达式的值赋给其左侧的变量。在 【 例 2.2】 程序实例中,i=3,a=5,b=7; c=a>b?a:b;
d=a<=b&&I; d=(c,d=c);,都是将,=”右侧的数值或表达式的值赋给
,=”左侧的变量。赋值运算符的优先级低于条件运算符,其结合性是右结合。如,a=b=c=a>b?a:b;相当于 a=( b=( c=( a>b?a:b)));
值得注意的是:赋值运算符运算对象中的左侧对象一定是变量。如:
a=b-c=5;相当于 a=(( b-c) =5) ;,由于表达式中出现将数值 5赋给 b-c表达式,因此,该表达式是非法的。
返回本节目录
2.3.7 逗号运算符及逗号表达式
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
逗号运算符是,,”,它的优先级低于赋值运算符,是左结合性。用逗号运算符将若干个表达式连接成一个逗号表达式。一般形式如下:
表达式 1,表达式 2,…… 表达式 n
逗号表达式的操作过程是:先计算表达式 1,再计算表达式 2,……,
最后再计算机表达式 n,而逗号表达式的值为最右边表达式 n的值。
如,a=4.5,b=6.4,34.5-20.1,a-b
该逗号运算表达式,它由四个表达式结合而成,从左向右依次计算,
逗号表达式的值为 a-b的值,即 -1.9。
在 【 例 2.2】 程序实例中,d=(c,d=c);”是将逗号表达式 c,d=c的值赋给变量 d。
值得注意的是,逗号运算符是 C语言所有运算符中优先级最低。如:
a=10,20;不同于 a=(10,20);,前者 a的值为 10,表达式的值为 20,后者 a
的值为 20,表达式的值也为 20。
返回本节目录
2.3.8 求字节运算符
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
C求字节运算符是 sizeof,它用于计算变量或某种类型的量在内存中所占的字节数。用法有两种,
1.sizeof 表达式
2.sizeof(类型名)
功能是计算出表达式计算结果所占用内存的字节数。如:在 【 例 2.1】
程序实例中
,printf(”int:%d,short:%d,char:%d,float:%d,double:%d\n“,sizeof(
a),sizeof(r),sizeof(c),sizeof(pi),sizeof(s));,就是输出变量
a,r,c,pi,s所占的内存字节数。
功能是计算出某种类型的量存储时所占用内存的字节数。如:
sizeof(float)计算单精度实型数据在内存中所占的字节数,结果为 4。
返回本节目录强制类型转换是指通过强制类型转换运算符,将表达式的类型强制转换为所指定的类型。强制类型转换的一般形式为:
(数据类型)操作数 或 数据类型(操作数)
功能是将操作数的值强制转换成指定的数据类型。如,int(120.4*7)
是将 120.4*7值转换成 int型数据,表达式的值为 842。
值得注意的是,数据类型转换是对操作数的值进行转换,并不改变操作数中变量本身的数据类型。
2.3.9 类型转换
《C
语言程序设计
,(V
isu
al
C+
+
6.
0
环境
)
整型、单精度、双精度及字符型数据可以进行混合运算。当表达式中的数据类型不一致时,首先转换为同一类型,然后再进行运算。 C语言有两种方法实现类型转换:一是自动类型转换,另一是强制类型转换。
1.自动类型转换
2.强制类型转换
C编译系统自动完成,
转换方向见右图所示 。
返回本节目录
char,short float
int unsigned unsigned
long
long double long double
低 高类型转换过程中,当数据类型由低向高转换时,数据精度不会受到损失;而数据类型由高到低的转换,此时,数据精度会受到损失。