操作符的分类:
1.算术操作符
2.移位操作符
3.位操作符
4.赋值操作符
5.复合操作符
6.关系操作符
7.逻辑操作符
8.单目操作符
9.条件操作符
10.逗号表达式
11.下标引用,函数调用,结构成员
算术操作符
种类 | 注意事项 |
---|---|
+ | |
- | |
* | |
/ | 除数不能为 0 |
% | 操作数必须是两个整数 |
提醒:在进行算术运算时,要注意运算过程中类型的隐式转换
移位操作符
种类 | 作用 | 注意事项 |
---|---|---|
<< | 按二进制左移 ,高位抛弃,低位补0 | 类似于*2^n |
>> | 逻辑右移:按二进制右移,低位抛弃,高位补0; 算术右移:按二进制右移,低位抛弃,高位补符号位(0或1) | 类似于/2^n 一般用的是算术右移 负数在计算机中按补码存放 |
提醒:移位操作相比于普通的算术操作,运算时间会短一些,但是在写代码的过程中,算术运算的优势体现的更明显一些,首先是代码的可读性强,其次是编译器会进行算术运算到移位操作的自动转化优化,因此无需再担心运算时间的问题。
位操作符
种类 | 作用 | 注意事项 |
---|---|---|
& | 按二进制进行与运算 | |
I | 按二进制进行或运算 | |
^ | 按二进制进行异或运算 | a ^ b ^ a == a |
赋值操作符
种类 | 注意事项 |
---|---|
= | 注意赋值类型 |
复合操作符
种类 | 注意事项 |
---|---|
+= -= *= /= %= | a += b; 等价于a = a + b; |
>>= <<= | a >> b 等价于a = a >> b; |
&= I= ^= | a & b 等价于a = a & b; |
关系操作符
种类 | 注意事项 |
---|---|
> < | |
>= <= | |
== != | ==不要与=混淆 != 是不等于的意思 |
提醒:关系操作符时常与逻辑操作符搭配,如 a > 1 && a < 10
但是不能写成 1 < a < 10
逻辑操作符
种类 | 作用 | 注意事项 |
---|---|---|
&& | 按逻辑与进行判断 | 区分位操作符& |
II | 按逻辑或进行判断 | 区分位操作符 I |
提醒:逻辑操作符又称作短路操作符,如果&&和II的第一个操作数能够确定整体的值,则第二个操作数不再判断。
单目操作符
种类 | 作用 | 注意事项 |
---|---|---|
! | 逻辑反 | 返回值为 0 或 1 |
+ - | 求一个数的正负后值 | int a = -1; a = +a; a的值仍然为 -1 |
sizeof() | 求操作数的长度 | 该操作数可以为变量,类型,数组名,指针 |
~ | 对二进制数按位取反 | |
++ - - | 对操作数加1或减1 | ++i 和 i++的区别 |
* | 间接访问操作 | 在指针使用,称作解引用操作 |
(类型) | 强制类型转换 |
提醒:不要将sizeof()误认为是函数
条件操作符
种类 | 作用 | 注意事项 |
---|---|---|
exp1 ? exp2 : exp3 | exp1成立则返回exp2,否则返回exp3 | 条件操作符又称作三目操作符 条件操作符的优先级最低 |
提醒:上述条件操作符等价于:
if (exp1) {
return exp2;
} else {
return exp3;
}
逗号表达式
种类 | 注意事项 |
---|---|
exp1, exp2, exp3, …, expn | 从左到右依次执行 但整个表达式的结果为最后一个表达式的结果expn |
提醒:逗号表达式的作用可能不是很明显,比如看下列代码
int a = 1;
int b = a;
if (a > 0) {
...
}
用逗号表达式来表示:
int a, b;
if (a = 1, b = a, a > 0) {
...
}
其实还是第一段代码比较好
下标引用,函数调用,结构成员
种类 | 注意事项 |
---|---|
[ ] | arr[index] index >= 0 |
() | Fac() ()内存放参数,区别形参和实参 |
. -> | 直接访问结构体成员:student.name 间接访问结构体成员:student -> name |