- 在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。
- 而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。
【轻松学C:编程小白的大冒险】— 09 运算符与表达式的实际应用
一、🌟 运算符家族大阅兵
- 今天我们要解锁C语言的全部34个运算符!每个运算符都是身怀绝技的江湖高手,让我们逐个揭开它们的神秘面纱。
- 运算符家族大阅兵 表格
分类 | 运算符符号 | 描述 | 示例代码 | 优先级 |
---|---|---|---|---|
算术运算符 | + - * / % | 加减乘除取余 | 5 + 3 * 2 → 11 | 4-3 |
赋值运算符 | = += -= *= /= %= | 基本及复合赋值 | coins += 5 → coins=15 | 2 |
关系运算符 | > < == != >= <= | 比较大小关系 | 5 > 3 → 1 | 6-7 |
逻辑运算符 | && ` | !` | 逻辑与/或/非 | |
位运算符 | & ` | ^` `~` `<<` `>>` | 二进制位操作 | 0b1010 & 0b0101 → 0b0000 |
其他运算符 | () [] . -> | 括号/数组/结构体成员访问 | arr[0] ptr->value | 1 |
++ -- | 自增自减 | i++ → i=i+1 | 2 | |
sizeof | 计算数据类型大小 | sizeof(int) → 4 | 2 | |
? : | 三目条件运算符 | a>b ? a : b | 13 | |
, | 逗号运算符 | int x=(5,6,7) → x=7 | 14 | |
& * | 取地址/间接访问 | int *p=&x; *p=5 | 2 | |
(类型) | 强制类型转换 | (float)total / quantity | 2 |
二、🧮 算术运算符:数学界的五虎上将
1. 加法运算符 +
- 特点:最友好的运算符,支持数字相加和字符串拼接(但C语言不支持)
- 示例代码
int apples = 3, oranges = 5;
printf("水果总数:%d", apples + oranges); // 8
- 使用场景:购物车金额计算、步数统计等
- 示例图
2. 减法运算符 -
- 特点:可以计算年龄差、温度变化等
- 示例代码
int birthYear = 2000, currentYear = 2025;
printf("年龄:%d", currentYear - birthYear); // 25
- 使用场景:时间差计算、库存管理等
- 示例图
3. 乘法运算符 *
- 特点:几何计算必备,支持快速翻倍
- 示例代码
float radius = 3.5;
printf("圆面积:%.2f", 3.14 * radius * radius); // 38.47
- 使用场景:图形渲染、投资收益计算等
- 示例图
4. 除法运算符 /
- 特点:整数相除会自动"砍尾",浮点相除需注意精度
- 示例代码
int slices = 7, people = 3;
printf("每人分到:%d片", slices / people); // 2
- 使用场景:资源分配、数据平均等
- 示例图
5. 取模运算符 %
- 特点:返回余数,可用于判断奇偶性
- 示例代码
int number = 13;
printf("%s", number % 2 ? "奇数" : "偶数"); // 奇数
- 使用场景:周期性任务调度、验证码生成等
- 示例图
二、📜 赋值运算符:数据管道工程师
1、基本赋值 =
- 特点:把右边的值"倒入"左边变量
- 示例代码
int score = 90; // 把90赋值给score
- 示例图
2、复合加法赋值 +=
- 特点:懒人必备快捷方式,等价于
变量 = 变量 + 值
- 示例代码
int coins = 10;
coins += 5; // 等价于 coins = coins + 5 → 15
- 示例图
3、复合减法赋值 -=
- 特点:懒人必备快捷方式,等价于
变量 = 变量 - 值
- 示例代码
int balance = 100;
balance -= 30; // 等价于 balance = balance - 30 → 70
- 示例图
4、复合乘法赋值 *=
- 特点:懒人必备快捷方式,等价于
变量 = 变量 * 值
- 示例代码
int speed = 5;
speed *= 2; // 等价于 speed = speed * 2 → 10
- 示例图
5、复合除法赋值 /=
- 特点:懒人必备快捷方式,等价于
变量 = 变量 / 值
- 示例代码
int slices = 12;
slices /= 3; // 等价于 slices = slices / 3 → 4
- 示例图
6、复合取模赋值 %=
- 特点:懒人必备快捷方式,等价于
变量 = 变量 % 值
- 示例代码
int remainder = 10;
remainder %= 3; // 等价于 remainder = remainder % 3 → 1
- 示例图
三、 👀 关系运算符:代码裁判组
运算符 | 含义 | 示例 |
---|---|---|
> | 大于 | 5 > 3 → 1 |
< | 小于 | 2 < 4 → 1 |
== | 等于 | 3 == 3 → 1 |
!= | 不等于 | 5 != 6 → 1 |
>= | 大于等于 | 5 >= 5 → 1 |
<= | 小于等于 | 4 <= 3 → 0 |
- 使用场景:常用于条件判断(如 if 语句)、循环控制(如 for 循环)以及逻辑表达式组合。
- 示例代码
#include <stdio.h>
int main() {
int a = 5, b = 3;
// 大于
printf("5 > 3 → %d\n", a > b); // 输出: 1
// 小于等于
printf("3 <= 5 → %d\n", 3 <= 5); // 输出: 1
// 不等于
printf("a != b → %d\n", a != b); // 输出: 1
return 0;
}
- 示例图
四、🧠 逻辑运算符:代码的智能大脑
1、逻辑与 &&
- 特点:两个条件都为真才返回真
- 示例代码
#include <stdio.h>
int main() {
int age = 20;
int score = 70;
if (age >= 18 && score > 60) {
printf("合格");
} else {
printf("不合格");
}
return 0;
}
- 示例图
2、 逻辑或 ||
- 特点:只要一个条件为真就返回真
- 示例代码
#include <stdio.h>
int main() {
int isVIP = 1;
int points = 800;
if (isVIP || points > 1000) {
printf("可兑换");
} else {
printf("不可兑换");
}
return 0;
}
- 示例图
3、逻辑非 !
- 特点:反转布尔值
- 示例代码
#include <stdbool.h>
#include <stdio.h>
// 模拟显示登录页面的函数
void showLoginPage() {
printf("显示登录页面\n");
}
int main() {
bool isLoggedIn = false;
if (!isLoggedIn) {
showLoginPage();
}
return 0;
}
- 示例图
五、💻 位运算符:二进制世界的黑客
1、按位与 &
- 特点:只有对应位都为1才保留1
- 示例代码
#include <stdio.h>
int main() {
unsigned char flag = 0b1010;
flag &= 0b0101;
printf("按位与运算结果: 0b%04b\n", flag);
return 0;
}
- 示例图
2、按位或 |
- 特点:对应位有 1 就保留 1
- 示例代码
#include <stdio.h>
int main() {
unsigned char led = 0b0000;
led |= 0b0001;
printf("按位或运算后 led 的值: 0b%04b\n", led);
return 0;
}
- 示例图
3、按位异或 ^
- 特点:对应位不同才保留 1
- 示例代码
#include <stdio.h>
int main() {
unsigned char num1 = 0b1010;
unsigned char num2 = 0b0101;
unsigned char result = num1 ^ num2;
printf("按位异或运算结果: 0b%04b\n", result);
return 0;
}
- 示例图
4、按位取反 ~
- 特点:翻转所有二进制位
- 示例代码
#include <stdio.h>
int main() {
unsigned char data = 0b1100;
unsigned char result = ~data;
printf("按位取反运算结果: 0b%04b\n", result);
return 0;
}
- 示例图
5、左移 <<
- 特点:每左移一位相当于乘以 2
- 示例代码
#include <stdio.h>
int main() {
int speed = 5;
speed <<= 1;
printf("左移运算后 speed 的值: %d\n", speed);
return 0;
}
- 示例图
6、右移 >>
- 特点:每右移一位相当于除以 2
- 示例代码
#include <stdio.h>
int main() {
int population = 100;
population >>= 2;
printf("右移运算后 population 的值: %d\n", population);
return 0;
}
- 示例图
六、 📊 运算符优先级:代码交通规则
七、 💡 小课堂:运算符的隐藏技能
- 逗号运算符:
int x = (5, 6, 7);
结果x=7
- 三目运算符:
max = (a > b) ? a : b;
- 强制类型转换:
float price = (float)total / quantity;
八、😂 编程冷笑话
程序员的老婆让他去买酱油:
- “记得买酱油,如果看到西瓜就买一个!”
- 程序员回家时只带了一个西瓜。
- 老婆:“为什么不买酱油?”
- 程序员:“因为我看到了西瓜!”
九、✨ 今日金句
“运算符是代码的标点符号,用好了能写出优美的诗,用错了就是乱码的诅咒!”