
4.1 认识运算符
C语言中的运算符是一种告诉编译器执行特定的数学或逻辑操作的符号,C语言内置了丰富的运算符,主要包括算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符等。
4.1.1 算术运算符
C语言中的算术运算符是用来处理四则运算的符号,是最简单、最常用的符号,数字的处理几乎都会使用到算术运算符。如表4-1所示显示了C语言支持的所有算术运算符。这里假设变量A的值为10,变量B的值为20。
表4-1 算术运算符

【例4.1】编写程序,计算数值21与10的和、差、积等数值,并输出计算结果(源代码\ch04\4.1.txt)。

程序运行结果如图4-1所示。

图4-1 例4.1的程序运行结果
在算术运算符中,自增、自减运算符又分为前缀和后缀。当++或--运算符置于变量的左边时,称为前置运算或前缀,表示先进行自增或自减运算,再使用变量的值。而当++或--运算符置于变量的右边时,称为后置运算或后缀,表示先使用变量的值,再进行自增或自减运算。前置后置运算方法如表4-2所示,这里假设计算的数值为a和b,并且a的值为5。
表4-2 自增、自减运算符的前置与后置

【例4.2】编写程序,定义整型变量x、y,分别对x做前置运算和后置运算,将运算结果赋予y,分别输出x、y的值(源代码\ch04\4.2.txt)。

程序运行结果如图4-2所示。在本实例中,y=x++先将x赋值给y,再对x进行自增运算。y=++x先将x进行自增运算,再将x赋值给y。y=x--先将x赋值给y,再对x进行自减运算。y=--x先将x进行自减运算,再将x赋值给y。

图4-2 例4.2的程序运行结果
4.1.2 关系运算符
关系运算可以被理解为是一种“判断”,判断的结果要么是“真”,要么是“假”。C语言定义关系运算符的优先级低于算术运算符,高于赋值运算符。C语言中定义的关系运算符如表4-3所示。这里假设变量A的值为10,变量B的值为20。
表4-3 关系运算符

☆大牛提醒☆
关系运算符中的等于号==很容易与赋值号=混淆,一定要记住,=是赋值运算符,而==是关系运算符。
【例4.3】编写程序,使用关系运算符判断数值5与6的关系,并输出判断结果(源代码\ch04\4.3.txt)。

程序运行结果如图4-3所示。

图4-3 例4.3的程序运行结果
4.1.3 逻辑运算符
C语言为用户提供了逻辑运算符,包括逻辑与、逻辑或、逻辑非3种逻辑运算符。逻辑运算符两侧的操作数需要转换成布尔值进行运算。逻辑与和逻辑非都是二元运算符,要求有两个操作数,而逻辑非为一元运算符,只有一个操作数。
表4-4显示了C语言支持的所有逻辑运算符,假设变量A的值为1,变量B的值为0。
表4-4 逻辑运算符

为了方便掌握逻辑运算符的使用,逻辑运算符的运算结果可以用逻辑运算的“真值表”来表示,如表4-5所示。
☆大牛提醒☆
逻辑运算符与关系运算符的返回结果一样,分为“真”与“假”两种,“真”为“1”,“假”为“0”。
【例4.4】编写程序,使用逻辑运算符判断数值5与6的关系,并输出判断的结果(源代码\ch04\4.4.txt)。
表4-5 真值表


程序运行结果如图4-4所示。

图4-4 例4.4的程序运行结果
4.1.4 赋值运算符
赋值运算符为二元运算符,要求运算符两侧的操作数类型必须一致(或者右边的操作数必须可以隐式转换为左边操作数的类型),C语言中提供的简单赋值运算符如表4-6所示。
表4-6 赋值运算符

【例4.5】编写程序,使用赋值运算符对5进行赋值运算,然后输出运算结果(源代码\ch04\4.5.txt)。

程序运行结果如图4-5所示。

图4-5 例4.5的程序运行结果
☆大牛提醒☆
在书写复合赋值运算符时,两个符号之间一定不能有空格,否则将会出错。
4.1.5 位运算符
任何信息在计算机中都是以二进制的形式保存的,位运算符是对数据按二进制位进行运算的运算符。C语言中提供的位运算符如表4-7所示,这里假设变量A的值为60,变量B的值为13。
表4-7 位运算符

【例4.6】编写程序,使用位运算符对数值60和13进行位运算,然后输出运算结果(源代码\ch04\4.6.txt)。

程序运行结果如图4-6所示。

图4-6 例4.6的程序运行结果
4.1.6 杂项运算符
在C语言中,除了算术运算符、关系运算符、逻辑运算符等,还有其他一些重要的运算符,如表4-8所示。
表4-8 杂项运算符

【例4.7】编写程序,使用杂项运算符计算变量的值(源代码\ch04\4.7.txt)。

程序运行结果如图4-7所示。

图4-7 例4.7的程序运行结果
4.1.7 运算符的优先级
运算符的种类非常多,通常不同的运算符又构成了不同的表达式,甚至一个表达式中又包含有多种运算符,因此它们的运算方法应该有一定的规律性。C语言规定了各类运算符的运算优先级及结合性等,如表4-9所示。
表4-9 运算符的运算优先级及结合性

☆大牛提醒☆
如果无法确定运算符的有效顺序,则尽量采用括号来保证运算的顺序,这样也使得程序一目了然,而且自己在编程时能够保持思路清晰。
【例4.8】编写程序,使用小括号改变表达式的运算顺序,并输出表达式的计算结果(源代码\ch04\4.8.txt)。

程序运行结果如图4-8所示。

图4-8 例4.8的程序运行结果