565 字
1 分钟
【C】运算符
算术运算符
+ - * / %
- 先乘除、后加减;可用括号改变顺序
- 整数相除结果向零截断取整:
5 / 2 == 2 - 浮点运算:只要有一侧为浮点类型,按浮点规则运算;两
float相除结果为float(不会自动变成double,除非发生提升) - 不能对 0 做除法或取模
- 不能对浮点数使用
% - 负数取模:结果符号由实现定义(C99 前);实践中常与被除数同号
关系运算符
< <= > >= == !=
- 结果为 0(假) 或 非 0(真);关系运算的结果通常是 0 或 1
- 不要写
if (a = b)当比较用,应写if (a == b)
赋值运算符
= += -= *= /= %=
- 只能作用于可修改的左值(一般为变量)
- 结合性:从右向左,如
a = b = 1
自增自减
++ --(前缀与后缀)
int temp = 5;int a = temp++; // a = 5,temp 变为 6int b = ++temp; // temp 先变 7,b = 7- 不能用于常量或纯表达式(如
(a+b)++) - 不要在同一表达式中对同一变量多次自增/自减,结果未定义
逻辑运算符
&& || !
- C 语言没有
a < b < c这种链式比较,应写a < b && b < c
短路求值
&&:左侧为假则不再计算右侧||:左侧为真则不再计算右侧
常用于避免空指针解引用:ptr != NULL && *ptr > 0
逗号运算符
,
从左到右依次求值各表达式,整个逗号表达式的值为最后一个表达式的值。
int x = (1, 2, 3); // x 为 3for (i = 0, j = 10; i < j; i++, j--) { }条件运算符(三目)
表达式1 ? 表达式2 : 表达式3- 表达式1 非 0 则求值表达式2,否则求值表达式3
- 嵌套时:
?与右侧最近的:配对(结合方向自右向左)
int max = (a > b) ? a : b;位运算符
对整数类型的二进制位操作:& | ^ ~ << >>
| 运算符 | 含义 |
|---|---|
& | 按位与,同为 1 才为 1 |
| | 按位或,有 1 则为 1 |
^ | 按位异或,相同为 0 |
~ | 按位取反 |
<< | 左移,右侧补 0 |
>> | 右移;无符号补 0;有符号右移实现定义 |
- 移位位数须合法,过大或负数为未定义行为
- 常用于标志位、权限掩码等
运算符优先级(由高到低)
()[]->.、后缀++--- 前缀
++--、+-(正负)、!~、强制转换、解引用*、取址& */%+-<<>><<=>>===!=&^|&&||?:- 赋值
=+=… ,
不确定时加括号,可读性优先。
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
相关文章 智能推荐
