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. 是的。

相关推荐
lxl13071 小时前
C++算法(4)前缀和
开发语言·c++·算法
不想看见4042 小时前
Minimum Path Sum 基本动态规划:二维--力扣101算法题解笔记
算法·leetcode·动态规划
啊阿狸不会拉杆2 小时前
《计算机视觉:模型、学习和推理》第 7 章-复杂数据密度建模
人工智能·python·学习·算法·计算机视觉·t分布·复杂数据密度建模
Loo国昌2 小时前
【AI应用开发实战】00_StockPilotX技术博客专栏:从零构建生产级AI金融分析系统
人工智能·算法·语言模型·自然语言处理·金融·prompt
NGC_66112 小时前
Dijkstra算法
算法
Tisfy2 小时前
LeetCode 762.二进制表示中质数个计算置位:位运算(mask O(1)判断)
算法·leetcode·题解·位运算·质数
你撅嘴真丑2 小时前
第十章-数论初步
算法
你的冰西瓜2 小时前
C++ STL算法——数值算法
开发语言·c++·算法·stl
追随者永远是胜利者2 小时前
(LeetCode-Hot100)215. 数组中的第K个最大元素
java·算法·leetcode·职场和发展·go