目录
四.运算符
简单概括:C语言的运算符可分为以下几类:
●算术运算符:用于各类数值的运算;
●关系运算符:用于比较运算;
●逻辑运算符:用于逻辑运算;
●位操作运算符:参与运算的量,按二进制位进行运算;
●赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值、复合位运算赋值三类共11种
●条件运算符:也叫三目运算符、三元运算符,用于条件求值(?:);
●逗号运算符:把若干表达式组合成一个表达式;
●指针运算符:取内容(*)和取地址(&)两种运算;
●求字节数运算符:计算数据类型或表达式所占的字节数(sizeof);
●特殊运算符:有括号()、下标[ ]、成员(->,.)等几种。
4.1算术运算符
运算符 | 名称 |
---|---|
+ | 加法运算符 |
- | 减法运算符 |
* | 乘法运算符 |
/ | 除法运算符 |
% | 求余运算符(模运算符) |
+ | 正号运算符(单目运算符) |
- | 负号运算符(单目运算符) |
++ | 自增运算符 |
-- | 自减运算符 |
举个例子来说明:
#include<stdio.h>
int main()
{
int a=5;/*定义并赋值*/
int b=9;//定义并赋值//
int c=13;//定义并赋值//
printf("a+b=%d\n",a+b);
printf("c-b=%d\n",c-b);
printf("a*c=%d\n",a*c);
printf("c%%a=%d\n",c%a);//在printf中,%是格式控制符的开头,是一个特殊的字符,不能直接输出;两个%%才能输出,此时为一个普通的字符//
return 0;
}
运行结果为;
注意:
●取余运算中,①取余运算符两边的操作数必须为整数,②余数的符号取决于%左边的整数,如果左边为负数,那么余数也是负数,如(-10)%3=-1,反之亦然。
●除法运算中,①两整数相除,结果取整,小数舍掉;②若两数中有一个为小数,则结果也为小数,且是double类型的小数。
●在C语言中,对变量本身进行运算可以有简写形式。假设用#来表示某种运算符,那么
a=a#b
可以简写为
a#=b
#表示+、-、*、/、%中的任何一种运算符。
自增和自减
自增运算符++和自减运算符--,是单目运算符,只需要一个操作对象,意思表示每次自身加1或减1。自增自减只针对变量,不针对数字,如10++就是错误的。
运算符在变量前还是在变量后是有区别的:
在变量前叫做前自增(自减),如++a,先运算后赋值;
在变量后叫做后自增(自减),如a++,先赋值后运算
例子:
#include<stdio.h>
int main()
{
int a,b;
a=b=6;
printf("%d %d\n",++a,b++);
printf("%d %d\n",++a,b++);
printf("%d %d\n",++a,b++);
printf("%d %d\n",++a,b++);
printf("\n");
printf("%d %d\n",--a,b--);
printf("%d %d\n",--a,b--);
printf("%d %d\n",--a,b--);
printf("%d %d\n",--a,b--);
return 0;
}
运行结果如下:
4.2赋值运算符
简单赋值运算符记为“=”,由=连接的式子称为赋值表达式,其一般形式为
变量=表达式
在赋值符=之前加上其他二目运算符可构成复合运算符。例如:
+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=
一般形式为:
变量 双目运算符=表达式 等效于 变量=变量 运算符(表达式)
例如;a+=5等价于a=a+5,x*=y+7等价于x=x*(y+7)
注意:在进行赋值运算时,会发生类型转换,一般将取值范围小的类型转化为取值范围大的类型是安全的,如int整数赋给long长整型;字符串(字符数组)不饿能使用赋值运算符。
4.3关系运算符
关系运算符用于比较两个量,都是双目运算符,共有6种
符号 | 说明 |
---|---|
< | 小于,如x<y |
<= | 小于或等于 |
> | 大于 |
>= | 大于或等于 |
== | 等于 |
!= | 不等于 |
注意:①=是赋值,==才是判断两个数是否相等,不能混用;②关系运算符的比较结果是逻辑值,即非真即假,也就是非1即0;
下面看一个例子:
#include<stdio.h>
int main()
{
int a=5;
int b=10;
if (a <= b)
{
printf("A小于或等于B\n");
}
else
{
printf("A大于B\n");
}
printf("%d\n",6>=6);
printf("%d\n",7==8);
return 0;
}
结果为
4.4逻辑运算符
C语言中提供三种逻辑运算符
符号 | 规则 | 例子 |
---|---|---|
&& 逻辑与运算符(双目) | 参与运算的两个量均为真时,此表达式才为真 | 5>4&&4.0>3.9结果为1 |
|| 逻辑或运算符(双目) | 参与运算的两个量有一真时,表达式即为真 | 5>8||4<2结果为1 |
! 逻辑非运算符(单目) | 参与运算的量为真时结果为真,反之为假 | !(5>4)结果为0 |
注意:C语言编译在运算得出逻辑运算结果值时,1为真,0为假;但在判断一个量是真还是假时,以0代表假,以非0的数值作为真,例如:5&&0的值为0.
4.5条件运算符
也叫三目运算符,符号为?:,是一个三目运算符,即有3个参与运算的量。由条件运算符组成条件表达式的一般形式为
表达式1?表达式2:表达式3;
语义:先判断表达式1的值是真是假,为真时执行表达式2,并以表达式2的值作为整个表达式的值;为假时执行表达式3,并以表达式3的值作为整个表达式的值。
举例如下:
①
max=(a>b)?a:b;
等同于
if(a>b) max=a; else max=b;
②
int a,b,c; a=7; b=6; c=(a>b)?a:b;
等同于
if (a>b) c=a; else c=b;
注意:①条件运算符是一对运算符,不能分开单独使用;②条件运算符的结合方向是自右向左,例如,“a>b?a:c>d?c:d”应理解为“a>b?a:(c>d?c:d)”。这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。
4.6逗号运算符
符号为, 功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。
求值过程是从左到右分别求n个表达式的值,并以表达式n的值作为整个逗号表达式的值,n大于等于2.
4.7sizeof运算符
sizeof运算符是C语言的关键字,它用来计算变量(或数据类型)在当前系统中占用内存的字节数,也叫长度(求字节)运算符,是一种单目运算符,以字节为单位返回某操作数的大小,用来求某一类型变量的长度。其运算对象可以是任何数据类型或变量。形式:sizeof(数据类型或变量名)
注意:sizeof不是函数!
例子:
#include<stdio.h>
int main()
{
int n=0;
int intsize = sizeof(int);
printf("int sizeof is %d bytes\n",intsize);
return 0;
}
结果为:
4.8C语言运算符优先级
优先级 | 运算符 | 运算符类型 | 结合方向 |
---|---|---|---|
1(最高) | ()(圆括号) [ ](下标) ->(指向结构体成员) .(结构体成员) | 自左向右 | |
2 | !(逻辑非)、++(自增)、--(自减)、-(负号)、*(指针)、&(地址)、sizeof(长度) | 单目 | 自右向左 |
3 | *、/、%(算术运算符) | 双目 | 自左向右 |
4 | +、-(算术运算符) | 双目 | 自左向右 |
5 | <<(左移)、>>(右移) | 双目 | 自左向右 |
6 | <、<=、>、>=(关系) | 双目 | 自左向右 |
7 | ==(等于)、!=(不等于) | 双目 | 自左向右 |
8 | &&(逻辑与) | 双目 | 自左向右 |
9 | ||(逻辑或) | 双目 | 自左向右 |
10 | ?:(条件) | 三目 | 自右向左 |
11 | 赋值运算符 | 双目 | 自右向左 |
12 | ,(逗号) | 双目 | 自左向右 |