1 运算符分类
C语言提供了13种类型的运算符,如下所示。
(1)算术运算符(+ - * / %)
(2)关系运算符(> < == >= <= !=)
(3)逻辑运算符(&& ||)
(4)位运算符(<< >> ~ | ^ &)
(5)赋值运算符(=及其扩展赋值运算符)
(6)条件运算符(?:)
(7)逗号运算符(,)
(8)指针运算符(* &)—— 指针
(9)求字节数运算符(sizeof)
(10)强制类型转换运算符((类型))
(11)分量运算符(.->) —— 结构体
(12)下标运算符([])—— 数组
(13)其他(如函数调用运算符())—— 函数
2 算术运算符及算术表达式
当一个表达式中同时出现这5种运算符时,先进行乘,除,取余,取余也称取模,后进行加,减。
除%运算符外,其余几种运算符既适用于浮点型数又适用于整型数。当操作符/的两个操作数都是整型数时,它执行整除运算,在其他情况下执行浮点型数除法。%为取模运算符,它接收两个整型操作数,将左操作数除以右操作数,但它的返回值是余数而不是商。由算术运算符组成的式子称为算术表达式,表达式一定有一个值。
#include <stdio.h>
int main()
{
int result=4+5*2-6/3+10%4;
printf("result=%d\n",result);
return 0;
}
3 关系运算符与关系表达式
关系表达式的值只有真和假,对应的值为1和0。由于C语言中没有布尔类型,所以在C语言中0值代表假,非0值即为真。例如,关系表达式3>4为假,因此整体值为0,而关系表达式5>2为真,因此整体值为1。关系运算符的优先低于算术运算符。
当判断整型变量i是否等于3时,我们可以写为3==i,即把常量写在前面而把变量写在后面。这是因为当不小心将两个
等号写为一个等号时,变量在前面就会导致编译不通,从而快速发现错误(这种写法属于华为公
司内部的一条编程规范)。
需要判断三个数是否相等,绝对不可以写为if(5==5==5),这种写法的值无论何时都为假,因为首先5==5得到的结果为1,然后1==5得到的结果为0。如果要判断三个变量a、b、c是否相等,那么不能写为a==b==c,而应写为a==b&&b==c。
【例】关系运算符的使用
#include <stdio.h>
//不能用数学上的连续判断大小来判断某个数
int main()
{
int a;
while(scanf("%d",&a))
{
if(3<a<10){
printf("a在3和10之间\n");
}else{
printf("a不在3和10之间\n");
}
}
return 0;
}
如果要判断变量a是否大于3且同时小于10,那么不能写为3<a<10,这种写法在数学上的确是正确的,但是在程序中是错误的。首先,无论a是大于3还是小于3,对于3<a这个表达式只有1或0两种结果。由于1和0都是小于10的,所以无论a的值为多少,这个表达式的值始终为真,因此在判断变量a是否大于3且同时小于10时,要写成a>3&&a<10,这才是正确的写
法。