房屋租赁网站建设如何给客户定位山东住房和建设庭网站
文章目录
- 1. 算术运算符
- 2. 关系运算符
- 3. 逻辑运算符
- 4. 位运算符
- 5. 赋值运算符
- 6. 条件运算符(三目运算符)
- 7. 逗号运算符
- 8. sizeof 运算符
- 9. 指针运算符
- 10. 特殊运算符
- 运算符优先级和结合性
运算符是告诉编译器执行特定数学或逻辑操作的符号,是构成表达式的基础。
1. 算术运算符
用于执行基本的数学运算。
| 运算符 | 描述 | 示例 (a=10, b=3) | 结果 |
|---|---|---|---|
| + | 加法 | a + b | 13 |
| - | 减法 | a - b | 7 |
| * | 乘法 | a * b | 30 |
| / | 除法 | a / b | 3 |
| % | 取模(求余数) | a % b | 1 |
| ++ | 自增 | a++ 或 ++a | a 变为 11 |
| – | 自减 | a-- 或 --a | a 变为 9 |
| 注意: | |||
| / 除法:当两个整数相除时,结果也是整数,小数部分被截断(不是四舍五入)。例如 10 / 3 结果是 3,10.0 / 3 结果是 3.333…。 | |||
| % 取模:要求两个操作数必须为整数。 | |||
| ++ 和 --: | |||
| 前缀 (++a/–a):先自增/自减,然后返回新值。 | |||
| 后缀 (a++/a–):先返回原值,然后自增/自减。 |
int a = 10, b;
b = ++a; // a 先变成 11,然后 b 被赋值为 11
// 现在 a=11, b=11a = 10;
b = a++; // b 先被赋值为 10,然后 a 变成 11
// 现在 a=11, b=10
2. 关系运算符
用于比较两个值,返回 1 (真) 或 0 (假)。
| 运算符 | 描述 | 示例 (a=10, b=20) | 结果 |
|---|---|---|---|
| == | 等于 | a == b | 0 |
| != | 不等于 | a != b | 1 |
| > | 大于 | a > b | 0 |
| < | 小于 | a < b | 1 |
| >= | 大于等于 | a >= b | 0 |
| <= | 小于等于 | a <= b | 1 |
3. 逻辑运算符
用于连接多个条件,返回 1 (真) 或 0 (假)。
| 运算符 | 描述 | 示例 | 解释 |
|---|---|---|---|
| && | 逻辑与 | (a > 5) && (b < 5) | 两个条件都为真,结果才为真 |
| || | 逻辑或 | (a > 5) || (b < 5) | 两个条件有一个为真,结果就为真 |
| ! | 逻辑非 | !(a > 5) | 逆转操作数的逻辑状态 |
| 注意:逻辑运算符支持“短路求值” |
A && B:如果 A 为假,则不会计算 B。A || B:如果 A 为真,则不会计算 B。
4. 位运算符
直接在数据的二进制位上操作,只能用于 char 和 int 等整型。
| 运算符 | 描述 | 示例 (a=60, b=13) a=0011 1100, b=0000 1101 |
|---|---|---|
| & | 按位与 | a & b = 0000 1100 (12) |
| | | 按位或 | a | b = 0011 1101 (61) |
| ^ | 按位异或 | a ^ b = 0011 0001 (49) |
| ~ | 按位取反 | ~a = 1100 0011 (-61,取决于位数和表示法) |
| << | 左移 | a << 2 = 1111 0000 (240) |
| >> | 右移 | a >> 2 = 0000 1111 (15) |
| 注意: |
左移 <<:高位丢弃,低位补 0。相当于乘以 2^n。
右移 >>:
对无符号数,低位丢弃,高位补 0。
对有符号数,低位丢弃,高位补符号位(算术右移)。
相当于除以 2^n(向下取整)。
5. 赋值运算符
用于给变量赋值。
| 运算符 | 示例 | 等价于 |
|---|---|---|
| = | a = b | a = b |
| += | a += b | a = a + b |
| -= | a -= b | a = a - b |
| *= | a *= b | a = a * b |
| /= | a /= b | a = a / b |
| %= | a %= b | a = a % b |
| <<= | a <<= 2 | a = a << 2 |
| >>= | a >>= 2 | a = a >> 2 |
| &= | a &= b | a = a & b |
| ^= | a ^= b | a = a ^ b |
6. 条件运算符(三目运算符)
C 语言中唯一需要三个操作数的运算符。
语法: 条件 ? 表达式1 : 表达式2
执行过程: 如果条件为真,则整个表达式取 表达式1 的值,否则取 表达式2 的值。
int a = 10, b = 20, max;
max = (a > b) ? a : b; // 因为 a> b 为假,所以 max 被赋值为 b (20)
7. 逗号运算符
用于将多个表达式连接在一起。整个逗号表达式的值是最后一个表达式的值,计算顺序从左到右。
int a, b, c;
c = (a = 5, b = a + 3, a + b);
// 执行过程:a被赋值为5 -> b被赋值为8 -> c被赋值为a+b(5+8)=13
8. sizeof 运算符
用于计算变量、类型或数据结构在内存中所占的字节数。它是一个编译时运算符,返回值类型是 size_t。
int arr[10];
printf("Size of int: %zu\n", sizeof(int)); // 通常是 4
printf("Size of variable a: %zu\n", sizeof(a));
printf("Size of entire array: %zu\n", sizeof(arr)); // 4 * 10 = 40
9. 指针运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
| & | 取地址运算符,返回变量的内存地址 | &a |
| * | 解引用运算符,返回指针所指地址的值 | *ptr |
10. 特殊运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
| [] | 数组下标 | arr[5] |
| () | 函数调用 | printf(…) |
| . | 结构体成员访问 | struct.member |
| -> | 通过指针访问结构体成员 | ptr->member |
| (type) | 强制类型转换 | (float) a |
运算符优先级和结合性
当多个运算符出现在同一个表达式中时,优先级决定了谁先计算,结合性决定了相同优先级运算符的计算顺序(从左到右还是从右到左)。
(), [], ->, . (从左到右)
大致规律(从高到低):
单目运算符:!, ~, ++, --, +(正), -(负), *(解引用), &(取址), sizeof, (type) (从右到左)
算术运算符:*, /, % -> +, - (从左到右)
移位运算符:<<, >> (从左到右)
关系运算符:<, <=, >, >= -> ==, != (从左到右)
位运算符:& -> ^ -> | (从左到右)
逻辑运算符:&& -> || (从左到右)
条件运算符:?: (从右到左)
赋值运算符:=, +=, -= 等 (从右到左)
逗号运算符:, (从左到右)图片来自菜鸟教程:https://www.runoob.com/cprogramming/c-operators.html

注意:使用括号 () 来明确指定计算顺序!这是最安全、最清晰的做法。
