算术操作符
'+ 、- 、* 、/ 、%'
除法操作符的两个操作数都是整数的话,执行的是整数除法;两个操作数只要有一个是浮点数,执行的是小数除法;
取模操作符的两个操作数必须是整数;
移位操作符
'<<'左移操作符 '>>'右移操作符
移动的是二进制的位
<<
最左边一位丢弃,右边补0。
>>
逻辑右移
右边丢弃,左边用0填充
2. 算术右移
右边丢弃,左边用原来的符号位填充
ps:右移是采用哪种方式,取决于编译器,这两种方法与负数移位后的正负性有关
位操作符
'&'按位与
'|'按位或
'^'按位异或(支持交换律)
不创建变量交换两数:
int main()
{
int a = 3;
int b = 5;
//a = a + b;
//b = a - b;
//a = a - b;
//两数较大时不行
a = a ^ b;
b = a ^ b;//b = a ^ b ^ b;
a = a ^ b;//a = a ^ b ^ a;
}
ps:操作数必须是整数,且是对补码进行运算
赋值操作符
'='
a=b=c;
从右向左赋值。
#### 复合赋值符
'+ =、- =、* =、/ =、^ =、>> ='
单目操作符
'!、-、+、&、sizeof、~(对一个数补码按位取反)、--、++、* 、(类型)(强制类型转换)'
不输入时结束循环写法:
while(~scanf())//EOF=-1,~-1=0
关系操作符
'> 、 >= 、 < 、 <= 、!= 、== '
逻辑操作符
'&& 、||'
ps:&&前为假则不执行后面运算,||前为真则不执行后面运算
示例:
![](https://i-blog.csdnimg.cn/blog_migrate/a3218ae45200520fd8b88a55ce6941a4.png)
结果:
![](https://i-blog.csdnimg.cn/blog_migrate/839d68012a515a706a480f157dd0c8a4.png)
条件操作符
'exp1 ? exp2 : exp3;'
本质:
if(exp1)
exp2;
else
exp3;
示例:
a > 5 ? b = 3 : b = -3;
b = a > 5 ? 3 : -3;
逗号表达式
'exp1,exp2,exp3,···,expn'
从左到右依次执行,整个表达式的最后结果是最后一个表达式的结果。
示例:
int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1);
结果:c = 3;
示例:
![](https://i-blog.csdnimg.cn/blog_migrate/b8b404942862b1139d2692174064fd54.png)
下标引用、函数调用和结构成员
下标引用
操作数:一个数组名+一个索引值
函数调用
操作数:函数名+()
结构成员访问操作符
' . 、->'