C语言学习二:运算符
算术运算符
+ 加法运算,一目取正
- 减法运算,一目取负
* 乘法运算
/ 除法运算
% 取模(求余)
++ 自加 1 a++(再参与表达式的运算,在自加) , ++a (先自加)
-- 自减 1
注意:
- 减号也是一个负号表示取反, a = -100 , -a -> 100
- 取模运算的左右两个操作数必须是整型的 (5%3)
- 自加,自减既可以操作整型也可以操作浮点,也可以操作指针
- 前缀(++a) : 先进行自加/自减的运算,然后再参与表达式的运算
- 后缀(a++): 先参与表达式的运算,然后再进行自加/自减的运算
1 | int a = 5 ; |
关系运算符
> 大于 a> b 判断 a 是否大于 b ,该表达式的值为布尔值
< 小于
>= 大于等于 a >= b 判断 a 是否大于或者等于 b , 该表达式的值为布尔值(表达式中只要a 是大于或者等于b 表达式都为真)
<= 小于等于
== 等于 a == b 判断是否相等
!= 不等于 a != b 判断是否不相等
注意:
- 判断两个数是否相等使用的
==, 是两个等号,而不是一个 - 关系运算符的表达式值为布尔值
- 在数学中 100< a <200 , 在代码中需要拆开 , a > 100 && a < 200
逻辑运算符
! 逻辑反 !(x>9) 如果 x 确实大于 9 则整个表达式为假,反之为真
&& 逻辑与 ( a > 100 && a < 200 ) 该表达式两边同时为真则为真, 如果其中一个为假则整个表达式为 假
|| 逻辑或 ( a > 100 || a < 200 ) 该表达式中其中一个为真则整个表达式为真
注意:
-
在逻辑与的运算中,如果左边为假则直接判断为假,右边的表达式将不会执行
-
在逻辑或的运算中,如果左边为真则表达式直接判断为真,右边的表达式将不会执行
1 | int a = 100 ; |
位运算符
~ 位逻辑反
1 | int a = 3 ; |
& 位逻辑与 有零得零 --> 清零操作
1 | int a = 3 ; |
| 位逻辑或 有一得一 --> 置1 操作
1 | int a = 3 ; |
^ 位逻辑异或 相同得0 ,不同得1
1 | int a = 3 ; |
1 | int a = 5 ; |
<< 左移
1 | int a = 3 ; |

>> 右移

注意:
-
位运算符操作的是操作数的每一个二进制位
-
位逻辑反,实际上是对操作数的每一个二进制位进行取反, 0与1之间对调
-
异或运算,相同得 0 ,不同得1
-
位移,移出去的丢弃,空出来的补0
如果移动是一个有符号的数据(正负),并右移运算时,移出去丢弃,空出来补符号位
特殊运算符
赋值运算符 = (左值=右值)
-
左值不能是常量 ,比如100 = a ;
-
不能直接对数组赋值
-
可以使用连续赋值 a = b = c = d = 100 ;
1 | int a , b ; |
复合运算符
当左右两边有相同的操作数时,可以使用符合运算符,使得代码看起来更加简明,且可以在一定程度上提高效率。
只有以下十种复合运算符:
1 | // 加减乘除 |
条件运算符(三目运算符)
- 唯一一个需要三个操作数的运算符(表达式)
- 语法:
表达式1 ? 表达式2 : 表达式3 - 如果表达式1的值为真,则整个表达式的值为表达式2 ,冒号左边
- 如果表达式1的值为假,则整个表达式的值为表达式3 ,冒号右边
1 | int a = 100 ; |
sizeof 运算符
该运算符看起来很像一个函数,不要忘记它实际只是一个运算符,用来计算指定的变量或变量类型从而得到他在内存中所需要占用的字节
1 | // 求变量类型 |
return 运算符
含义:退出某一个函数(如果是在主函数遇到 return,则退出程序,进程结束;如果不是主函数,则返回到被调用的位置)
语法:必须出现在函数体内部,可以携带对应类型的值,进行返回
1 | int main(int argc, char const *argv[]) |
优先级与结合性
当一个表达式中同时出现了多个运算符时,根据优先级以及结合性进行运算,比如先乘除后加减
优先级:man operator

逗号表达式
语法 : 表达式1 = (表达式2 ,表达式3 ,表达式4 , … , 表达式 n );
1 | int a = 10 ; |
注意:
- 逗号表达式中,会从左往右依次运算每一一个表达式
- 整个表达式的值取决于最后一个表达式的值





