运算符
1.算术运算符
+ - * /(除) %(取余数)
2.关系运算符
> >= < <= !=(不等于) =
3.逻辑运算符
!(非) &&(并且) ||(或)
!真 假
!假 真
真&&真 真
真&&假 假
假&&真 假
假&&假 假
真||假 真
假||真 真
真||真 真
假||假 假
4.C语言对真假的处理
-
非零是真
-
零是假
-
真是1表示
-
假是0表示
-
&&左边的表达式为假 右边的表达式肯定不会执行
-
||左边的表达式为真 右边的表达式肯定不会执行
5.赋值运算符
= += *= /=
a+=3是等价于a=a+3,a/=3等价于a=a/3
6.优先级别
- 算术 > 关系 > 逻辑 > 赋值
7.自增(自减)
分类
- 前自增
++i;
- 后自增
i++;
前自增和后自增的异同
- 相同
- 都使i的值加1
- 不同
- 前自增表达式的值是i加1之后的值(先自增后赋值)
- 后自增表达式的值是i加1之前的值(先赋值后自增)
学习自增要明白的几个问题
- 我们编程时应该尽量屏蔽掉前自增和后自增的差别
- 自增表达式最好不要作为一个更大的表达式的一部分来使用,或者说 i++ 和 ++i 单独成一个语句,不要把它作为一个完整复合语句的一部分来使用,如:
int m = i++ + ++i + i + i++;
printf("%d %d %d",i++,++i,i);
//这样写是不规范代码,而且是不可移植的代码
8.三目运算符
格式
A ? B : C
等价于
if (A) {
B
} else {
C
}
9.逗号表达式
格式
(A, B, C, D)
功能
- 从左到右执行
- 最终表达式的值是最后一项
位运算符
& ---按位与
- && -- 逻辑与
- &&与&完全不同
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
5 (0101) & 7 (0111) = 5
21 (00010101) & 7 (0111) = 5
5 (0101) & 1 (0001) = 1
5 (0101) & 10 (1010) = 0
| ---按位或
- || -- 逻辑或
1 | 0 = 1
1 | 1 = 1
0 | 1 = 1
0 | 0 = 0
~ --- 按位取反
- ~i就是把i变量所有的二进制取反
^ ---按位异或
- 相同为0
- 不同为1
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 1
0 ^ 0 = 1
<< --- 按位左移
- i<< 3 表示把i的所有二进制位左移3位,右边补0
- 左移n位相当于乘以2的n次方,前提是数据不能丢失
面试题:
A) i = i* 8;
B) i = i<< 3;
请问上述两个语句,哪个语句执行速度快
答案:B快
>> --- 按位右移
- i>> 3 表示把i的所有二进制位右移3位,左边一般是补0,也可能补1
- 右移n位相当于除以2的n次方,前提是数据不会丢失
面试题:
A) i = i / 8;
B) i = i>> 3;
请问上述两个语句,哪个语句执行速度快
答案:B快
位运算的现实意义
- 通过位运算我们可以对数据的操作精确到每一位
网友评论