1.运算符和表达式 C语言中运算符和表达式数量之多,在其他高级语言中是很少见的。正是丰富的运算符和表达式使C语言功能十分完善,这也是C语言的特点之一。C语言中赋值运算符有“=”、“十=”、“一=”、“*=”、“/=”和“%=”等。用赋值运算符将运算对象连接而成的表达式称为赋值表达式。1.简单赋值运算符
#includeint main() { float PI = 3.14159; int s1, r = 5; double s2; s1 = r * r * PI; s2 = r * r * PI; printf("s1=%d, s2=%fn", s1, s2); return 0; }
最简单的赋值运算符就是“=”,它的作用是将一个数值赋给一个变量。如r=2的作用是执行一次赋值操作(或称赋值运算)。把常量2赋给变量r。也可以将一个表达式的值赋给一个变量。
下面是给变量赋值的例子:inta,b,c=3;定义a,b,c为整型变量,但只对c进行了赋值操作,c的值为3。2.字符常量指单个字符,用一对单引号及其括号所括起的字符来表示。如',B,一”$'、?'都是合法的字符常量。在C语直中,字符常量有以下特点:(1)字符常量只能用单引号括起来,不能用双引号或其它括号,(2)字符常量只能是单个字符,不能是字符串。(3)字符可以是ASCI1字符集中的任意字符。按ASCI1码的大小,不同的字符之间存在着次序,以字符的ASCII码值按升序连续排列。如小写字母的ASCII码大于大写字母的ASCII码,大写字母的ASCII码大于数字字符的ASCII码。使用字符常量时,每个字符在内存中占用一个字节,用于存储它的ASCII码值。所以C语言中的字符常量具有数值特征,可以像整数一样参加运算,此时相当于对字符的ASCⅡ码进行运算。如'4和4是不同的.4+1的值是53,因为'4'的ASCI值是52。字符'a的ASCI码是97,则'a+1=98,对应于字符b'。这是因为小写字母'a~z的ASCI1码按升序连续挂列,字符a的ASCII码加1,就是字符b'的ASCII码。附录1中的ASCII字符集列出了所有可以使用的字符。另外,对于控制符(如回车,换行等)与不可见字符,在C语言中通过转义字符来表示转义字符是用开头后面加上一个字符或用八进制六进制表示的ASCIL码值组成的作用是改变其后面的字符或ASCI码值的原有意义,转义为另外的含义。
3.基本的算术运算符基本算术运算包括加、、乘、除和求余等运算,其中加、减,乘,除和求余运算均为双目运算符(见表2.5),所谓双目运算符是指运算时需要两个操作数表2.5基本算术运算符运算符+%求余名称加减乘(1)+加法运算符,为双目运算符,其功能是进行求和运算,如3十4的值为7(2)一作为单目运算符使用时,是取负运算,如一3;作为双目运算符使用时,是进行求差运算,如3一4的值为一1(3)×乘法运算符,为双目运算符,功能是进行求乘积运算,如3:4的值为12.(4)/除法运算符,为双目运算符,功能是进行求商运算,如a/b在计算a/b时,如果a和b都是整型,则其商也为整型,小数部分被舍去,如3/4的结果为0,4/3的结果为1。如果a和b中有一个是实型,则a和b都转换为double类型,然后相除,结果为double类型,如3.0/2的结果为1.5。(5)%求余运算符,为双目运算符,功能是进行求余数的运算,如a%b.其结果为a除以b后的余数。求余运算要求参与运算的两个运算对象都必须是整型,其结果也是整型。如43的结果为1。求余运算结果的符号与第一个操作数符号相同,如一4%3的值为一1,4%一3的值为1,2.自增、自减运算符C语言有两个特殊运算符“++”和“一一”()十十自增运算符,为单目运算符,其功能是使变量的值自加1,自增运算符有两种使用形式:①前缀方式:用于变量前面,如“inta一++x;”它是“先计算,后使用”,即先将x的值自加1,然后将x的值赋给变量a②后级方式:用于变量后面,如“inta=x十+;”它是“先使用,后计算”,即先将x的值赋给变量a,然后再将x的值自加1。
4.自动类型转换不同类型的数据在一起运算时,编译系统会自动进行类型转换。进行自动转换的规则是:把占用内存空间少的(低级)类型向占用空间多的(高级)类型转换,以保证运算的精度,如图2.2所示。说明:(1)图2.2中的横向箭头表示必定的转换,如char型、short型数据必定先转换为int型,float型数据在运算时将先转换成double型,以提高运算精度(即使是两个float型数据相加,也要先转换成double型,然后再相加)。(2)图2.2中的纵向箭头表示当经过横向的转换后,进高doublefloat行运算的数据类型仍然不同时进行的转换方式。在不同数4据类型的转换过程中,类型转换顺序并不是按箭头方向一步一步的转换,可以没有中间类型转换。例如int型与longdouble型数据进行运算,先将int型的数据直接转换成double型,然后再进行两个同类型(double型)数据的运算。(3)数据类型的各种转换只影响表达式的运算结果,并unsigned不改变原变量的定义类型,并且其数据值也不会发生任何改变。(4)当赋值运算符两边的运算对象类型不同时,也要发低intchar,short生类型转换,转换的规则是:把赋值运算符右边表达式的类型转换为左边变量的类型。



