一、操作符分类
1、算数操作符
2、移位操作符
3、位操作符
4、赋值操作符
5、单目操作符
6、关系操作符
7、逻辑操作符
8、条件操作符
9、逗号表达式
10、下标引用、函数调用和结构成员
二、操作符具体功能
(一)算数操作符
+ - * / %
%操作符只能用整数,其他的操作符都可以作⽤于整数和浮点数。
(二)移位操作符
1、左移和右移 <<>>
左移:左边抛弃、右边补零
2、右移有两种:
(1)逻辑移位
右边丢弃,左边补零
(2)算术移位
右边丢弃,左边补原符号位
不移动负数位,
(三)位操作符
& 按位与
| 按位或
^ 按位异或
注意!!!他们的操作数必须是整数!!!
(四)赋值操作符
例如 A = 3赋值运算尽量不要连续赋值尽量分开赋值
复合赋值符
+=
-=
*=
/=
%=
>>=
<<=
&=
|=
=
这些运算符都可以写成复合的效果。
⽐如:
int x=10;
x = x+10;
x+=10;使用复合赋值这样写更加简洁。
(五)单⽬操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对⼀个数的⼆进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引⽤操作符)
(类型) 强制类型转换
例子:一个怪诞的程序
int main() { int i=0; int ret = (++i) + (++i) + (++i); printf("%d\n",ret); printf("%d\n",i); return 0; }
// 输出结构:
Linux : 10 4
VS2008 : 12 4
(六)关系操作符
>
>=
<
<=
!= ”
==
!有些运算符陷阱if(x = 6),并非判断等于而是赋值
(七)逻辑操作符
&& 逻辑与
|| 逻辑或
&&遇到0 后面的不再做运算
||遇到1后面的不再做运算
区分逻辑与和按位与
区分逻辑或和按位或
1&2----->0
1&&2---->1
1|2----->3
1||2---->1
(八)条件表达式
表达式1 ? 表达式2 : 表达式3
为真 表达式2 为假 表达式3
(九)逗号表达式
表达式1,表达式2,表达式3,表达式4,…,表达式N
从前往后运算,最后一个结果为逗号表达式的最终结果
(十)下标引⽤、函数调⽤和结构成员
1、下标引用符 数组名[索引值]
2、函数调用操作符 函数名(传递给被调用函数的实参)
3、访问结构体成员符 结构体.成员名
结构体指针->成员名
比如:
#include<stdio.h>
struct Stu
{ char name[10]; int age; char sex[5]; double score; }; void set_age1(struct Stu stu) { stu.age = 18; } void set_age2(struct Stu* pStu) { pStu->age =18; } int main() { struct Stu stu; struct Stu* pStu =&stu; stu.age = 20; set_age1(stu); pStu->age = 20; set_age2(pStu); return 0; }