C语言算术赋值运算复习笔记

目录

[1. 概述](#1. 概述)

[2. 常用的算术赋值运算符](#2. 常用的算术赋值运算符)

[3. 示例代码](#3. 示例代码)

[4. 注意事项](#4. 注意事项)

[4.1 优先级与结合性](#4.1 优先级与结合性)

[4.2 表达式的整体性](#4.2 表达式的整体性)

[4.3 数据类型匹配](#4.3 数据类型匹配)

[4.4 与自增/自减的区别](#4.4 与自增/自减的区别)
[4.5 效率考虑](#4.5 效率考虑)

[5. 常见错误](#5. 常见错误)

[6. 小结](#6. 小结)

[7. 练习(自测)](#7. 练习(自测))


1. 概述

算术赋值运算是一种复合赋值运算符,它将算术运算和赋值操作合并在一起,使代码更简洁、易读。基本形式为:

cs 复制代码
变量 算术赋值运算符 表达式;

等价于:

cs 复制代码
变量 = 变量 运算符 (表达式);

注意:右侧的表达式作为一个整体先计算,再与左边的变量进行算术运算,最后将结果赋给左边的变量。


2. 常用的算术赋值运算符

运算符 名称 示例 等价于
+= 加赋值 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. 示例代码

cs 复制代码
return 0; }

c

#include <stdio.h>

int main() {
    int a = 10, b = 3;
    
    a += b;    // a = a + b → 13
    printf("a += b: %d\n", a);   // 13
    
    a -= b;    // a = a - b → 10(此时 a 是 13,减 3 得 10)
    printf("a -= b: %d\n", a);   // 10
    
    a *= b;    // a = a * b → 30(10 * 3)
    printf("a *= b: %d\n", a);   // 30
    
    a /= b;    // a = a / b → 10(30 / 3,整数除法)
    printf("a /= b: %d\n", a);   // 10
    
    a %= b;    // a = a % b → 1(10 % 3)
    printf("a %%= b: %d\n", a);  // 1
复制代码
    

输出

cs 复制代码
a += b: 13
a -= b: 10
a *= b: 30
a /= b: 10
a %= b: 1

4. 注意事项

4.1 优先级与结合性

  • 算术赋值运算符的优先级低于 算术运算符(+-*/%),但高于逗号运算符。

  • 结合性为从右向左(右结合)。

  • 例如:a *= b + c; 等价于 a = a * (b + c);,因为 b + c 先计算。

4.2 表达式的整体性

右侧的表达式作为一个整体参与运算,因此括号可以省略,但建议在复杂表达式中加上括号以提高可读性:

c

cs 复制代码
x *= y + z;   // 等价于 x = x * (y + z);
// 不要误解为 x = x * y + z;

4.3 数据类型匹配

  • 运算结果会自动转换为左边变量的类型(遵循赋值类型转换规则)。

  • 若两边类型不一致,可能发生截断或精度损失。

c

cs 复制代码
int i = 5;
double d = 2.5;
i += d;       // i 最终为 7(double 转 int,小数部分丢失)

4.4 与自增/自减的区别

算术赋值是二元操作,而自增/自减(++/--)是一元操作,不要混淆:

c

cs 复制代码
a += 1;   // 等价于 a = a + 1,与 a++ 效果相同,但 a++ 是后自增,表达式的值不同

4.5 效率考虑

某些编译器可能将算术赋值优化为更高效的机器指令(例如直接修改内存中的值),但在现代编译器中差异通常不大。主要优点是代码简洁。


5. 常见错误

  • 忘记算术赋值运算符是一个整体,写成 a =+ b;(这是将 b 赋给 a,相当于 a = (+b);,并非加赋值)。

  • /=%= 中,右侧表达式为零时会导致运行时错误(除零异常)。

  • 误以为 a *= b + c; 是先乘后加,实际是先加后乘。


6. 小结

算术赋值运算符让代码更紧凑,同时保持了可读性。掌握它们的使用和优先级规则,能帮助写出更简洁的C程序。熟记五种运算符:+=-=*=/=%=,并理解其展开形式即可。


7. 练习(自测)

  1. 已知 int x = 4, y = 3; 执行 x *= y + 2; 后,x 的值是多少?

  2. 写出 a /= b - c; 的等价展开式。

  3. 判断:a %= 2; 等价于 a = a % 2; 吗?

答案

  1. x *= y + 2x = x * (y+2) = 4 * 5 = 20

  2. a = a / (b - c);

  3. 是的。

相关推荐
我不是懒洋洋12 小时前
从零开始实现一个简单的神经网络:C语言版
c语言
BirdenT12 小时前
20260518紫题训练
c++·算法
hoiii18712 小时前
基于STM32的音频播放系统,实现SD卡读取音频文件PWM输出播放
stm32·嵌入式硬件·音视频
Deitymoon12 小时前
STM32——软件IIC显示字符
stm32·单片机·嵌入式硬件
百万老师13 小时前
自然语言编程时代,如何零基础学习掌握嵌入式编程
c语言·单片机·嵌入式硬件·学习·ai全流程闭环开发
玛卡巴卡ldf13 小时前
【LeetCode 手撕算法】(多维动态规划)不同路径、最小路径和、最长回文子串、最长公共子序列、编辑距离
java·数据结构·算法·leetcode·动态规划·力扣
被AI抢饭碗的人13 小时前
算法:数据结构
数据结构·算法
_深海凉_13 小时前
LeetCode热题100-验证二叉搜索树
算法·leetcode·职场和发展
shehuiyuelaiyuehao13 小时前
算法27,二维前缀和
开发语言·python·算法
efangfd13 小时前
TXS0104 和 TXB0104 的 IO 驱动电流对比
单片机·嵌入式硬件