操作符的一种分类:
1.单目操作符(只有一个操作数)
! 逻辑反操作符
- 负值
+ 正值
& 取地址
sizeof 计算数据类型的长度
sizeof括号中的表达式是不参与运算的
#include<stdio.h>
int main()
{
short s = 5;
int a = 10;
printf("%d\n", sizeof(s = a + 2));
printf("%d\n", s);
return 0;
}
~ 对一个数的二进制按位取反(包括符号位)
-- :
(1)前置--
int main()
{
int a = 10;
int b = --a;
printf("%d\n", a);//9
printf("%d\n", b);//9
return 0;
}
(2)后置--
int main()
{
int a = 10;
int b = a--;
printf("%d\n", a);//9
printf("%d\n", b);//10
return 0;
}
++
(1)前置++
int main()
{
int a = 10;
int b = ++a;
printf("%d\n", a);//11
printf("%d\n", b);//11
return 0;
}
(2)后置++
int main()
{
int a = 10;
int b = a++;
printf("%d\n", a);//11
printf("%d\n", b);//10
return 0;
}
* 间接访问,解引用操作符
(类型) 强制类型转换
2.双目操作符(有两个操作数)
& 按位与
| 按位或
^ 按位异或
+ 加
- 减
* 乘
/ 除,取整
% 模,取余
&& 且
|| 或
>= 大于等于
<= 小于等于
!= 不等于
3.三目操作符(有三个操作数)
表达式1?表达式2 :表达式3
如果1成立,执行2,否则执行3。
另一种分类:
1.算数运算符:
(1)+ 运算符
将两个数字加起来
(2)- 运算符
将两个数字相减
(3)* 运算符
将两个数字相乘
(4)% 取模运算符
将两个数字相除然后去余
(5)/ 运算符
将两个数字相除取整
(6)++ 运算符
x++是在有这个的这个算式中先使用x,再自增1及x=x+1。++x是先自己加1,再使用。
(7)--
同++。
2.位运算符:
(1)>> 右移运算符(必须是整数)
使整数的二进制位向右移动一位
右移分为两种,
第一种是算术右移,右边丢弃,左边用原该值的符号位补充
第二种是逻辑右移,右边丢弃,左边补0
而我们一般使用算数右移。
(2)<< 左移操作符(整数)
使二进制位向左移动一位
左边丢弃,右边补0。
(3) & 按位与
只有相同的才为1,也就是两个对于二进制位都是1才为1
(4) | 按位或
对应二进制位只要有一个1,就为1
(5) ^ 按位异或
相同为0,相异为1
这里说一下按位异或的一种用法:
可以用来交换a和b的值:
结果如图:
接下来是一个小练习:(附带答案)
3. ,运算符
4. [] 下标操作符
5. () 函数调用操作符
有参数的情况下,操作数有三个
无参的情况下,有两个
6.结构成员访问的操作符
分为两个
一个是 .
一个是 ->