一.算术运算符
+ 加
- 减
* 乘
/ 除
% 取模
注意点: 取模运算不可以出现小数
取模运算的正负性取决于前面数字的正负
二.关系运算符
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于
注意点:(1)关系运算符的结合性是从左往右的,上面4个运算符的优先级大于下面2个
(2)赋值运算符〈比较运算符〈算术运算符
(3)关系运算符的结果只有0和1
三.逻辑运算符 :结果只有2个 真或者假
&& 逻辑与 (只要有一个表达式为假,整个表达式的结果就为假) 一假则假
如果前面的表达式为假,那么后面的表达式就不参与运算了。
结合方向:从左往右
|| 逻辑或 (只要有一个表达式为真,整个表达式的结果为真) 一真则真
如果前面的表达式为真,那么后面的表达式就不参与运算了
结合方向:从左往右
!逻辑非 真变假 假变真
结合方向 :从右往左
注意点: (1) !的优先级要高于比较运算符和算术运算符
(2) && || 的优先级小于关系运算符 大于赋值运算符
(3) &&的优先级高于||
四.赋值运算符
= += -= *= /= %=
int a =2;
a-=8;//等价于 a=a-8
注意点:(1)所有赋值运算符的优先级都是小于算术运算符的
(2)所有赋值运算符的优先级都相等,结合方向:从右到左
(3) 赋值运算符是所有运算符中,除了逗号运算符以外,优先级最低的
五.sizeof运算符
用来计算常量、变量、以及数据类型(某种数据类型的常量或变量)所占用的存储空间
注意点:(1)类型本身不占用存储空间,只是这种数据类型的数据才占用存储空间
(2)当sizeof作用在数据类型上,小括号不可以省略
六.自增自减
a++ a--
++a --a
规律:本身自增自减1,返回值:前加后不加,前减后不减
#include
int main(int argc const char *argv[]){
int a =10;
int b =++a;
printf("b=%d\n",b);// b=11
int c =a++;
printf("c=%d",c); // c=11
printf("a=%d\n",a);// a=12
return 0;
}
七.特殊运算符
1.逗号运算符
表达式1,表达式2,表达式3,……,表达式n
注意点:(1)逗号表达式的运算过程为:从左往右逐个计算表达式。
(2)逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。
(3)逗号运算符的优先级别在所有运算符中最低。
2.三目运算符
条件表达式?结果1:结果2
如果条件成立,则返回结果1,否则返回结果2
八.位运算符
1. & 按位与 对应的二进制位上,一个为0就是0,全1才是1
一假则假
2. | 按位或 对应的二进制位上,一个为1就是1,全0才是0
一真则真
3. ^ 按位异或 对应的二进制位上,不同为1,相同为0
(1) 多个数相互异或,交换顺序结果不变(类似加法交换律)
(2) 任何数异或0都是原来的数
(3) 相同的数相互异或,结果为0
4. ~ 按位取反 对应的二进制位 0变1 1变0
负数= 正数取反+1 正数取反=负数-1
5. >> 右移 m>>n 向右移动n位
移出来的数删掉,移入位补符号位 (正数补0,负数补1)
使用场景:快速计算一个整数除以2的n次方,对于一个整数来说右移几次就是除以几次方
6. << 左移 m<<n 向左移动n位
移出来的数删掉,移入位补0 左移可能会改变符号位(正负性)
使用场景:当数比较小的时候,可以快速的计算这个数乘以2多少次方 |
|