1.算术运算符
+ 把两个操作数相加
- 从第一个操作数中减去第二个操作数
* 把两个操作数相乘
/ 分子除以分母
% 取模运算符,整除后的余数
++ 自增运算符,整数值增加 1
-- 自减运算符,整数值减少 1
除法 / 的运算结果和运算对象的数据类型有关,两个数都是int,则商就是int,若商有小数,则截取小数部分;
被除数和除数中只要有一个或两个都是浮点型数据,则商也是浮点型,不截取小数部分
举例:
16 / 5 = 3
16 / 5.0 = 3.20000
取余 % 的运算对象必须是整数,结果是整除后的余数,其余的符号与除数相同
举例:
13 % 3 = 1
13 % -3 = 1
-13 % 3 = -1
-13 % 23 = -13
自增【或者自减】
分类:
前自增 ++i
后自增 i++
前自增和后自增的异同:
相同:
最终都使i的值加1
不同:
前自增整体表达式的值是i加1之后的值
后自增整体表达式的值是i加1之前的值
为什么会出现自增
代码更精炼
自增的速度更快
学习自增要明白的几个问题
我们编程时应该尽量屏蔽掉前自增和后自增的差别
自增表达式最好不要作为一个更大的表达式的一部分来使用或者说 i++ 和 i-- 单独成一个语句,不要把它作为一个完整复合语句的一部分来使用
如:
//这样写不但是不规范的代码,而且是不可移植的代码
int m = i++ + ++i + i + i++;
printf("%d %d %d", i++, ++i, i);
2.关系运算符
> 检查左操作数的值是否大于右操作数的值,如果是则条件为真
>= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真
< 检查左操作数的值是否小于右操作数的值,如果是则条件为真
<= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真
!= 检查两个操作数的值是否相等,如果不相等则条件为真
== 检查两个操作数的值是否相等,如果相等则条件为真
3.逻辑运算符
! 逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假
&& 逻辑与运算符。如果两个操作数都非零,则条件为真
|| 逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真
注意:
-----------------------------------
!真 = 假
!假 = 真
真&&真 = 真
真&&假 = 假
假&&真 = 假
假&&假 = 假
真||真 = 真
真||假 = 真
假||真 = 真
假||假 = 假
C语言对真假的处理:
非零是真
零是假
真是1表示
假是0表示
&&左边的表达式为假,右边的表达式肯定不会执行
举例:
int k = 20;
int m;
m = (1 > 2) && (k = 5);
printf("m = %d, k = %d", m, k);
||左边的表达式为真,右边的表达式肯定不会执行
举例:
int k = 20;
int m;
m = (1 < 2) || (k = 5);
printf("m = %d, k = %d", m, k);
-----------------------------------
4.位运算符
& 按位与操作,按二进制位进行"与"运算
| 按位或运算符,按二进制位进行"或"运算
^ 异或运算符,按二进制位进行"异或"运算
~ 取反运算符,按二进制位进行"取反"运算
<< 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
>> 二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃
举例:
& —— 按位与
&&逻辑与,也叫并且
&&与&的含义完全不同
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
| —— 按位或
||逻辑或
|按位或
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
~ —— 按位取反
~i 就是把 i 变量所有的二进制位取反
~(0101) = (1010)
^ —— 按位异或
相同为零
不同为1
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
<< —— 按位左移
i << 3 表示把i的所有二进制位左移3位,右边补零
左移n位相当于乘以2的n次方,前提是数据不能丢失
>> —— 按位右移
i >> 3 表示把i的所有二进制右移3位,左边一般是0,当然也可以补1
右移n位相当于除以2的n次方,前提是数据不能丢失
位运算的实现意义
通过位运算符我们可以对数据的操作精度到每一位
5.赋值运算符
= 简单的赋值运算符,把右边操作数的值赋给左边操作数
+= 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数
-= 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数
*= 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数
/= 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数
%= 求模且赋值运算符,求两个操作数的模赋值给左边操作数
<<= 左移且赋值运算符
>>= 右移且赋值运算符
&= 按位与且赋值运算符
^= 按位异或且赋值运算符
!= 按位或且赋值运算符
6.其他运算符
? 三目运算符
格式:
A ? B : C
等价于
if (A)
B;
else
C;
, 逗号表达式
格式:
(A, B, C, D)
功能:
从左到右执行
最终表达式的值是最后一项的值
7.优先级别
算术 > 关系 > 逻辑 > 赋值
8.题目
A) i = i * 8;
B) i = i << 3;
请问上述两个语句,哪个语句执行的速度快
答案:B快
A)i = i / 8;
B)i = i >> 3;
请问上述两个语句,哪个语句执行的速度快
答案:B快
如有不对或者疏漏的地方,请多多指出。谢谢(⁄ ⁄•⁄ω⁄•⁄ ⁄)