【轻松学C:编程小白的大冒险】— 09 运算符与表达式的实际应用

【轻松学C:编程小白的大冒险】— 09 运算符与表达式的实际应用_第1张图片

  • 在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。
  • 而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。

【轻松学C:编程小白的大冒险】— 09 运算符与表达式的实际应用

  • 一、 运算符家族大阅兵
  • 二、 算术运算符:数学界的五虎上将
    • 1. 加法运算符 `+`
    • 2. 减法运算符 `-`
    • 3. 乘法运算符 `*`
    • 4. 除法运算符 `/`
    • 5. 取模运算符 `%`
  • 二、 赋值运算符:数据管道工程师
    • 1、基本赋值 `=`
    • 2、复合加法赋值 `+=`
    • 3、复合减法赋值 `-=`
    • 4、复合乘法赋值 `*=`
    • 5、复合除法赋值 `/=`
    • 6、复合取模赋值 `%=`
  • 三、 关系运算符:代码裁判组
  • 四、 逻辑运算符:代码的智能大脑
    • 1、逻辑与 `&&`
    • 2、 逻辑或 `||`
    • 3、逻辑非 `!`
  • 五、 位运算符:二进制世界的黑客
    • 1、按位与 `&`
    • 2、按位或 `|`
    • 3、按位异或 `^`
    • 4、按位取反 `~`
    • 5、左移 `<<`
    • 6、右移 `>>`
  • 六、 运算符优先级:代码交通规则
  • 七、 小课堂:运算符的隐藏技能
  • 八、 编程冷笑话
  • 九、✨ 今日金句


一、 运算符家族大阅兵

  • 今天我们要解锁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
  • 使用场景:图形渲染、投资收益计算等
  • 示例图
圆周率 3.14
乘法运算符 *
半径
半径 * 3.14
乘法运算符 *
圆面积

4. 除法运算符 /

  • 特点:整数相除会自动"砍尾",浮点相除需注意精度
  • 示例代码
int slices = 7, people = 3;
printf("每人分到:%d片", slices / people); // 2
  • 使用场景:资源分配、数据平均等
  • 示例图
切片数量
除法运算符 /
人数
每人分到的切片数

5. 取模运算符 %

  • 特点:返回余数,可用于判断奇偶性
  • 示例代码
int number = 13;
printf("%s", number % 2 ? "奇数" : "偶数"); // 奇数
  • 使用场景:周期性任务调度、验证码生成等
  • 示例图
数字
取模运算符 %
2
余数是否为 0?
偶数
奇数

二、 赋值运算符:数据管道工程师

1、基本赋值 =

  • 特点:把右边的值"倒入"左边变量
  • 示例代码
int score = 90; // 把90赋值给score
  • 示例图
值 90
赋值运算符 =
变量 score

2、复合加法赋值 +=

  • 特点:懒人必备快捷方式,等价于 变量 = 变量 + 值
  • 示例代码
int coins = 10;
coins += 5; // 等价于 coins = coins + 5 → 15
  • 示例图
初始变量 coins
执行 += 5
读取数值: 5
读取 coins 的值: 10
计算 10 + 5 = 15
更新 coins 的值
最终 coins 的值: 15
等价表达式
coins = coins + 5

3、复合减法赋值 -=

  • 特点:懒人必备快捷方式,等价于 变量 = 变量 - 值
  • 示例代码
int balance = 100;
balance -= 30; // 等价于 balance = balance - 30 → 70
  • 示例图
初始变量 balance
执行 -= 30
读取数值: 30
读取 balance 的值: 100
计算 100 - 30 = 70
更新 balance 的值
最终 balance 的值: 70
等价表达式
balance = balance - 30

4、复合乘法赋值 *=

  • 特点:懒人必备快捷方式,等价于 变量 = 变量 * 值
  • 示例代码
int speed = 5;
speed *= 2; // 等价于 speed = speed * 2 → 10
  • 示例图
初始变量 speed
执行 *= 2
读取数值: 2
读取 speed 的值: 5
计算 5 * 2 = 10
更新 speed 的值
最终 speed 的值: 10
等价表达式
speed = speed * 2

5、复合除法赋值 /=

  • 特点:懒人必备快捷方式,等价于 变量 = 变量 / 值
  • 示例代码
int slices = 12;
slices /= 3; // 等价于 slices = slices / 3 → 4
  • 示例图
初始变量 slices
执行 /= 3
读取数值: 3
读取 slices 的值: 12
计算 12 / 3 = 4
更新 slices 的值
最终 slices 的值: 4
等价表达式
slices = slices / 3

6、复合取模赋值 %=

  • 特点:懒人必备快捷方式,等价于 变量 = 变量 % 值
  • 示例代码
int remainder = 10;
remainder %= 3; // 等价于 remainder = remainder % 3 → 1
  • 示例图
初始变量 remainder
执行 %= 3
读取数值: 3
读取 remainder 的值: 10
计算 10 % 3 = 1
更新 remainder 的值
最终 remainder 的值: 1
等价表达式
remainder = remainder % 3

三、 关系运算符:代码裁判组

运算符 含义 示例
> 大于 5 > 3 → 1
< 小于 2 < 4 → 1
== 等于 3 == 3 → 1
!= 不等于 5 != 6 → 1
>= 大于等于 5 >= 5 → 1
<= 小于等于 4 <= 3 → 0
  • 使用场景:常用于条件判断(如 if 语句)、循环控制(如 for 循环)以及逻辑表达式组合。
  • 示例代码
#include 

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
关系运算符
值 2
执行判断
返回 1
返回 0
规则说明
比较两个值的大小或相等性

四、 逻辑运算符:代码的智能大脑

1、逻辑与 &&

  • 特点:两个条件都为真才返回真
  • 示例代码
#include 

int main() {
    int age = 20;
    int score = 70;

    if (age >= 18 && score > 60) {
        printf("合格");
    } else {
        printf("不合格");
    }

    return 0;
}
  • 示例图
年龄 >= 18?
逻辑与运算符 &&
分数 > 60?
判断结果
输出: 合格
输出: 不合格
逻辑与规则
两个条件都为真才返回真

2、 逻辑或 ||

  • 特点:只要一个条件为真就返回真
  • 示例代码
#include 

int main() {
    int isVIP = 1;
    int points = 800;

    if (isVIP || points > 1000) {
        printf("可兑换");
    } else {
        printf("不可兑换");
    }

    return 0;
}
  • 示例图
是否为 VIP?
逻辑或
积分 > 1000?
判断结果
输出: 可兑换
输出: 不可兑换
逻辑或规则
只要一个条件为真就返回真

3、逻辑非 !

  • 特点:反转布尔值
  • 示例代码
#include 
#include 

// 模拟显示登录页面的函数
void showLoginPage() {
    printf("显示登录页面\n");
}

int main() {
    bool isLoggedIn = false;
    if (!isLoggedIn) {
        showLoginPage();
    }
    return 0;
}
  • 示例图
是否已登录?
逻辑非运算符 !
反转后的状态
输出: 显示登录页面
输出: 不显示登录页面
逻辑非规则
反转布尔值

五、 位运算符:二进制世界的黑客

1、按位与 &

  • 特点:只有对应位都为1才保留1
  • 示例代码
#include 

int main() {
    unsigned char flag = 0b1010;
    flag &= 0b0101;
    printf("按位与运算结果: 0b%04b\n", flag);
    return 0;
}
  • 示例图
二进制数 0b1010
按位与运算符 &
二进制数 0b0101
运算结果
输出: 0b0000
按位与规则
只有对应位都为 1 才保留 1

2、按位或 |

  • 特点:对应位有 1 就保留 1
  • 示例代码
#include 

int main() {
    unsigned char led = 0b0000;
    led |= 0b0001;
    printf("按位或运算后 led 的值: 0b%04b\n", led);
    return 0;
}
  • 示例图
结果
二进制数 0b0000
按位或
二进制数 0b0001
运算结果
输出: 0b0001
按位或规则
对应位有 1 就保留 1

3、按位异或 ^

  • 特点:对应位不同才保留 1
  • 示例代码
#include 

int main() {
    unsigned char num1 = 0b1010;
    unsigned char num2 = 0b0101;
    unsigned char result = num1 ^ num2;
    printf("按位异或运算结果: 0b%04b\n", result);
    return 0;
}
  • 示例图
结果
二进制数 0b1010
按位异或运算符 ^
二进制数 0b0101
运算结果
输出: 0b1111
按位异或规则
对应位不同才保留 1

4、按位取反 ~

  • 特点:翻转所有二进制位
  • 示例代码
#include 

int main() {
    unsigned char data = 0b1100;
    unsigned char result = ~data;
    printf("按位取反运算结果: 0b%04b\n", result);
    return 0;
}
  • 示例图
结果
二进制数 0b1100
按位取反
运算结果
输出: 0b0011
按位取反规则
翻转所有二进制位

5、左移 <<

  • 特点:每左移一位相当于乘以 2
  • 示例代码
#include 

int main() {
    int speed = 5;
    speed <<= 1;
    printf("左移运算后 speed 的值: %d\n", speed);
    return 0;
}
  • 示例图
结果
值 5
左移运算符 <<
移动位数 1
运算结果
输出: 10
左移规则
每左移一位相当于乘以 2

6、右移 >>

  • 特点:每右移一位相当于除以 2
  • 示例代码
#include 

int main() {
    int population = 100;
    population >>= 2;
    printf("右移运算后 population 的值: %d\n", population);
    return 0;
}
  • 示例图
结果
值 100
右移运算符 >>
移动位数 2
运算结果
输出: 25
右移规则
每右移一位相当于除以 2

六、 运算符优先级:代码交通规则

高优先级
括号/下标
单目运算符
乘除取模
加减
移位
关系
相等
位与
位异或
位或
逻辑与
逻辑或
三目
赋值
逗号

七、 小课堂:运算符的隐藏技能

  1. 逗号运算符int x = (5, 6, 7); 结果x=7
值 5
逗号运算符
值 6
值 7
最终值 7
赋值给变量 x
  1. 三目运算符max = (a > b) ? a : b;
值 a
比较 a > b
值 b
将 a 赋值给 max
将 b 赋值给 max
  1. 强制类型转换float price = (float)total / quantity;
变量 total
强制类型转换为 float
除法运算符 /
变量 quantity
结果赋值给 price

八、 编程冷笑话

程序员的老婆让他去买酱油:

  • “记得买酱油,如果看到西瓜就买一个!”
  • 程序员回家时只带了一个西瓜。
  • 老婆:“为什么不买酱油?”
  • 程序员:“因为我看到了西瓜!”

九、✨ 今日金句

“运算符是代码的标点符号,用好了能写出优美的诗,用错了就是乱码的诅咒!”

你可能感兴趣的:(#,C,语言,c语言,开发语言)