C语言运算符是说明特定操作的符号 ,它是构造C语言表达式的工具 。C语言的运算异常丰富,除了控制语句和输入输出以外的几乎所有的基本操作都为运算符处理。除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符,比如位运算符。
操作符分类
- 算术运算符
- 移位运算符
- 位操作符
- 赋值操作符
- 单目操作符
- 关系操作符
- 逻辑操作符
- 条件操作符
- 逗号表达式
操作符详解
算数运算符
+ - * 、 %
数学上的加减乘除、取余。这几个比较常见,需要注意的有:
/操作如果两侧的参数都是整型,那么得到的结果也会是一个整型,例如:5/2结果为2。
而如果其中一个为float类型则结果会为float类型,例如:5/2.0结果为2.5。
%操作只能进行整数的取余运算。
移位运算符
<<左移运算符
左边抛弃,右边补零。
>>右移运算符
右移运算符分为两种:
- 逻辑移位
左边填充0,右边丢弃 - 算术移位
左边用该值的符号位填充,右边丢弃
注意:移动运算符不能移动负位数
位操作符
&按位与
|按位或
^按位异或
一段很巧妙的代码:
#include<stdio.h>
int main()
{
int a=1;
int b=2;
a^=b;
b^=a;
a^=b;
printf("a=%d\nb=%d\n",a,b);
return 0;
}
用异或运算符可以不借助第三个变量来交换两个整型变量的值。
运行结果为:
a=2
b=1
赋值操作符
=操作符可以将右边的值存入左边的变量中,可以对变量重复赋值
注意:=操作符应该和==操作符区分开,它们的意义不一样
特殊的:=表达式的值等于=右边的值,比如a=3这个表达式的值就为3,
a=0这个表达式的值就为0。
复合赋值操作符
以上提到的操作符都可以进行复合赋值操作。
比如a+=2
就和a=a+2
是相同的意思
再比如就a^=b
和a=a^b
是相同的意思
以此类推
单目操作符
单目操作符可以理解为“单个目标数操作符”,也就是说这个操作符只可以对一个目标进行运算。
如:
- 逻辑取反!
- 负值-
- 正值+
- 取地址&
- 算操作数的类型长度,以字节为单位返回sizeof
- 对一个数按二进制取反~
- 自减–
- 自加++
- 解引用*
- 强制类型转换(类型)
关系操作符
>
>=
<
<=
==
!=
这些用于比较的符号都是关系操作符。
注意区分==和=的区别。
逻辑操作符
&&
逻辑与
||
逻辑或
1&&0—->0
1&&1—->1
1 || 0—->1
0 || 0—->0
要区分&&
和&
的区别,&
是将两个数按二进制每一位进行&&
最后的结果。
比如:
1&&2—->1
1&2—->0
||和|同理
条件操作符
形如a?b:c
这种格式的为条件操作符,其中a、b、c可以为数值或表达式。
意思为a是否为真,如果a为真,这个表达式的值为b,否则为c。
例如下面这个语句:
int x,y,z;
y=1;
z=2;
x=y>z?y:z;
经过运算得出x的值应该为2。
逗号表达式)
逗号表达式是一种很特殊的存在,用,隔开的两个数值(表达式),整个表达式的值等于最后一个数值(表达式),与前面的数值(表达式)无关。
例如:
1,2,0
这个表达式的值为0,与前面的1,2都没有关系
下标引用、函数调用和结构成员
[ ]
用于数组的下标引用
( )用于调用函数,左边的操作数为函数名,右边的均为函数参数
.
和->
都用于访问结构体成员,不过->
操作符前面需要用结构体名,而->操作符前面要用结构体指针,不能混用。