C 语言运算符完全指南:算术、关系、逻辑、位运算等
C 语言运算符完全指南
本教程通过示例全面讲解 C 语言算术、自增自减、赋值、关系、逻辑、位运算及其他运算符的用法与优先级。
视频:C 语言算术运算符
运算符是作用于值或变量的符号。例如:+ 执行加法。
C 语言提供丰富运算符执行各种操作。
C 算术运算符
对数值(常量和变量)执行加减乘除等数学运算。
| 运算符 | 含义 |
|---|---|
| + | 加法或一元正号 |
| - | 减法或一元负号 |
| * | 乘法 |
| / | 除法 |
| % | 取模(除法余数) |
示例 1:算术运算符
// 算术运算符演示
#include <stdio.h>
int main() {
int a = 9, b = 4, c;
c = a + b; printf("a+b = %d \n", c);
c = a - b; printf("a-b = %d \n", c);
c = a * b; printf("a*b = %d \n", c);
c = a / b; printf("a/b = %d \n", c);
c = a % b; printf("Remainder when a divided by b = %d \n", c);
return 0;
}
输出
a+b = 13 a-b = 5 a*b = 36 a/b = 2 Remainder when a divided by b = 1
+、-、* 符合预期。9/4 数学上为 2.25,但程序输出 2,因两操作数均为 int,编译器截断小数部分。
% 仅用于整数。若 a=5.0、b=2.0、c=5、d=2,则:
// 任一操作数为浮点数 a/b = 2.5 a/d = 2.5 c/b = 2.5 // 两操作数均为整数 c/d = 2
C 自增与自减运算符
++ 增加 1,-- 减少 1,均为一元运算符。
示例 2:自增自减运算符
// 自增自减演示
#include <stdio.h>
int main() {
int a = 10, b = 100;
float c = 10.5, d = 100.5;
printf("++a = %d \n", ++a);
printf("--b = %d \n", --b);
printf("++c = %f \n", ++c);
printf("--d = %f \n", --d);
return 0;
}
输出
++a = 11 --b = 99 ++c = 11.500000 --d = 99.500000
此处为前缀用法。也可作后缀 a++、a--,后缀版本先使用值再修改。
C 赋值运算符
最常用赋值运算符为 =。
| 运算符 | 示例 | 等价于 |
|---|---|---|
| = | 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 |
示例 3:赋值运算符
// 赋值运算符演示
#include <stdio.h>
int main() {
int a = 5, c;
c = a; printf("c = %d\n", c); // 5
c += a; printf("c = %d\n", c); // 10
c -= a; printf("c = %d\n", c); // 5
c *= a; printf("c = %d\n", c); // 25
c /= a; printf("c = %d\n", c); // 5
c %= a; printf("c = %d\n", c); // 0
return 0;
}
输出
c = 5 c = 10 c = 5 c = 25 c = 5 c = 0
C 关系运算符
检查两操作数关系,真返回 1,假返回 0。用于决策与循环。
| 运算符 | 含义 | 示例 |
|---|---|---|
| == | 等于 | 5 == 3 为 0 |
| > | 大于 | 5 > 3 为 1 |
| < | 小于 | 5 < 3 为 0 |
| != | 不等于 | 5 != 3 为 1 |
| >= | 大于等于 | 5 >= 3 为 1 |
| <= | 小于等于 | 5 <= 3 为 0 |
示例 4:关系运算符
// 关系运算符演示
#include <stdio.h>
int main() {
int a = 5, b = 5, c = 10;
printf("%d == %d is %d \n", a, b, a == b);
printf("%d == %d is %d \n", a, c, a == c);
printf("%d > %d is %d \n", a, b, a > b);
printf("%d > %d is %d \n", a, c, a > c);
printf("%d < %d is %d \n", a, b, a < b);
printf("%d < %d is %d \n", a, c, a < c);
printf("%d != %d is %d \n", a, b, a != b);
printf("%d != %d is %d \n", a, c, a != c);
printf("%d >= %d is %d \n", a, b, a >= b);
printf("%d >= %d is %d \n", a, c, a >= c);
printf("%d <= %d is %d \n", a, b, a <= b);
printf("%d <= %d is %d \n", a, c, a <= c);
return 0;
}
输出
5 == 5 is 1 5 == 10 is 0 5 > 5 is 0 5 > 10 is 0 5 < 5 is 0 5 < 10 is 1 5 != 5 is 0 5 != 10 is 1 5 >= 5 is 1 5 >= 10 is 0 5 <= 5 is 1 5 <= 10 is 1
C 逻辑运算符
包含逻辑运算符的表达式返回 0 或 1,常用于决策。
| 运算符 | 含义 | 示例 |
|---|---|---|
| && | 逻辑与。全真才真 | c=5,d=2 时 ((c==5) && (d>5)) 为 0 |
| || | 逻辑或。一真即真 | c=5,d=2 时 ((c==5) || (d>5)) 为 1 |
| ! | 逻辑非。操作数为 0 才真 | c=5 时 !(c==5) 为 0 |
示例 5:逻辑运算符
// 逻辑运算符演示
#include <stdio.h>
int main() {
int a = 5, b = 5, c = 10, result;
result = (a == b) && (c > b);
printf("(a == b) && (c > b) is %d \n", result);
result = (a == b) && (c < b);
printf("(a == b) && (c < b) is %d \n", result);
result = (a == b) || (c < b);
printf("(a == b) || (c < b) is %d \n", result);
result = (a != b) || (c < b);
printf("(a != b) || (c < b) is %d \n", result);
result = !(a != b);
printf("!(a != b) is %d \n", result);
result = !(a == b);
printf("!(a == b) is %d \n", result);
return 0;
}
输出
(a == b) && (c > b) is 1 (a == b) && (c < b) is 0 (a == b) || (c < b) is 1 (a != b) || (c < b) is 0 !(a != b) is 1 !(a == b) is 0
逻辑运算符程序解析
(a == b) && (c > 5)两操作数均为 1,结果 1。(a == b) && (c < b)第二操作数为 0,结果 0。(a == b) || (c < b)第一操作数为 1,结果 1。(a != b) || (c < b)两操作数均为 0,结果 0。!(a != b)操作数为 0,取反为 1。!(a == b)操作数为 1,取反为 0。
C 位运算符
计算时数学运算转为位级操作,更快更省电。位运算符用于位级操作。
| 运算符 | 含义 |
|---|---|
| & | 按位与 |
| | | 按位或 |
| ^ | 按位异或 |
| ~ | 按位取反 |
| << | 左移 |
| >> | 右移 |
详见 C 语言位运算符详解。
其他运算符
逗号运算符
关联相关表达式:
int a, c = 5, d;
sizeof 运算符
一元运算符,返回数据(常量、变量、数组、结构体等)大小。
示例 6:sizeof 运算符
#include <stdio.h>
int main() {
int a; float b; double c; char d;
printf("Size of int=%lu bytes\n", sizeof(a));
printf("Size of float=%lu bytes\n", sizeof(b));
printf("Size of double=%lu bytes\n", sizeof(c));
printf("Size of char=%lu byte\n", sizeof(d));
return 0;
}
输出
Size of int = 4 bytes Size of float = 4 bytes Size of double = 8 bytes Size of char = 1 byte
三元运算符 ?:、取地址运算符 &、解引用运算符 *、成员选择运算符 -> 将在后续教程讨论。
C语言