C语言操作符

1. 算术操作符

操作符 描述 示例 注意事项
+ 加法 a + b 可用于整数和浮点数
- 减法 a - b 支持负数运算
* 乘法 a * b 注意溢出问题
/ 除法 a / b 整数除法截断小数(如5/2=2
% 取模(余数) a % b 仅用于整数,结果符号与a一致

2. 位操作符

操作符 描述 示例 关键点
& 按位与 a & b 清零特定位,检测奇偶
` ` 按位或 `a b` 设置特定位
^ 按位异或 a ^ b 相同为0,不同为1;交换变量常用
~ 按位取反 ~a 单目操作符,影响所有位
<< 左移 a << n 等价于乘以2ⁿ,空位补0
>> 右移 a >> n 算术右移(补符号位)常见

3. 赋值操作符

操作符 描述 示例 说明
= 简单赋值 a = 5 右值赋给左值
+= 复合赋值 a += 3 等价于a = a + 3
-=
*=
/=
%=
&=
`
=
^=
<<=
>>=`
复合扩展 a &= b 对应a = a & b

4. 自增/自减操作符

操作符 描述 示例 关键区别
++i 前置自增 int a = ++i; 先增后用(i先+1再赋值给a
i++ 后置自增 int a = i++; 先用后增(i先赋值给a再+1)
--i 前置自减 类似自增 操作符优先级高于算术操作符
i-- 后置自减 类似自增 避免在同一个表达式中多次修改同一变量(如i++ + ++i未定义行为)

5. 关系与逻辑操作符

类型 操作符 描述 示例 特性
关系操作符 > < >= <= == != 比较大小 a == b 返回0(假)或1(真)
逻辑操作符 && 逻辑与 a && b 短路特性:a为假则跳过b
` ` 逻辑或 `a b` 短路特性:a为真则跳过b
! 逻辑非 !a 单目操作符,真值取反

6. 条件操作符(三元操作符)

表达式1 ? 表达式2 : 表达式3
  • 规则:若表达式1为真,返回表达式2的值,否则返回表达式3的值。

  • 示例int max = (a > b) ? a : b;


7. 逗号操作符

表达式1, 表达式2, ..., 表达式N
  • 规则:从左到右依次执行,整个表达式的值为最后一个表达式(表达式N)的值。

  • 示例int a = (b=3, c=5, b+c); // a=8


8. 成员访问操作符

操作符 描述 示例 适用场景
. 结构体变量成员访问 struct Student s; s.age = 20; 直接访问结构体实例
-> 结构体指针成员访问 struct Student *p; p->age = 20; 通过指针访问成员

9. 其他重要操作符

操作符 描述 示例 说明
[] 数组下标访问 arr[3] = 5; 等价于*(arr + 3)
* 间接访问(解引用) int *p; *p = 10; 操作指针指向的内存
& 取地址 int *p = &a; 获取变量内存地址
sizeof 计算类型/对象大小 sizeof(int) 编译时求值,返回字节数
(type) 强制类型转换 (float)5/2 显式转换类型

10. 操作符优先级与结合性

优先级 操作符 结合性
1 () [] . -> ++(后置) --(后置) 从左到右
2 ! ~ ++(前置) --(前置) +(正) -(负) *(解引用) &(取地址) sizeof 从右到左
3 * / % 从左到右
4 + - 从左到右
5 << >> 从左到右
6 < <= > >= 从左到右
7 == != 从左到右
8 & 从左到右
9 ^ 从左到右
10 ` ` 从左到右
11 && 从左到右
12 ` ` 从左到右
13 ?: 从右到左
14 = += -= *= /= %= <<= >>= &= ^= ` =` 从右到左
15 , 从左到右

常见注意事项

  1. 位操作符 vs 逻辑操作符&&&完全不同,前者是位运算,后者是逻辑判断。

  2. 自增/自减陷阱:避免在同一个表达式中对同一变量多次修改(如i = i++未定义)。

  3. 短路特性&&||会跳过不必要的计算,可用于条件保护(如(p != NULL) && (*p > 0))。

  4. 右移符号扩展:对有符号数右移时,高位补符号位(算术右移);无符号数补0(逻辑右移)。

  5. 运算符优先级混淆:例如*p++等价于*(p++)而非(*p)++

通过系统化掌握这些操作符的特性,能够编写更高效、安全的C语言代码。

你可能感兴趣的:(C语言,java,算法,javascript)