C语言学习笔记 - 44.运算符和表达式 - 运算符2 - 除法与取余运算符

一、除法运算符(/)

除法是C语言算术运算符中与数学运算差异最大的运算符之一,其运算结果严格依赖于操作数的数据类型,是初学者最易出错的知识点。

1. 核心运算规则

  • 整数除法 :当被除数和除数均为整数类型 时,运算结果为整数 ,直接舍弃小数部分(向零取整),而非四舍五入。

  • 浮点除法 :当被除数或除数中至少有一个为浮点型 (float/double)时,运算结果为浮点型,保留完整小数部分。

2. 关键特性(结合谭浩强《C程序设计(第五版)》补充)

  • 负数整数除法的舍入方向:多数C编译系统(如VS、GCC)采用向零取整原则,即结果向数值0的方向靠拢。例如:

    • 5 / 3 = 1(舍弃0.666...)。

    • -5 / 3 = -1(舍弃-0.666...,向零取整为-1,而非-2)。

  • 浮点除法的精度:float型结果保留约6位有效数字,double型保留约15位有效数字。

3. 代码示例与解析

复制代码
#include <stdio.h>

int main() {
    // 整数除法示例
    printf("=== 整数除法 ===\n");
    printf("16 / 5 = %d\n", 16 / 5);    // 输出3,舍弃0.2
    printf("5 / 16 = %d\n", 5 / 16);    // 输出0,舍弃0.3125
    printf("-16 / 5 = %d\n", -16 / 5);  // 输出-3,向零取整
    printf("16 / -5 = %d\n", 16 / -5);  // 输出-3
    printf("-16 / -5 = %d\n", -16 / -5);// 输出3

    // 浮点除法示例
    printf("\n=== 浮点除法 ===\n");
    printf("16.0 / 5 = %f\n", 16.0 / 5);    // 输出3.200000,double型结果
    printf("16 / 5.0 = %f\n", 16 / 5.0);    // 输出3.200000
    printf("16.0 / 5.0 = %f\n", 16.0 / 5.0);// 输出3.200000
    printf("5.0 / 16 = %.4f\n", 5.0 / 16);  // 输出0.3125,保留4位小数

    return 0;
}

二、取余(取模)运算符(%)

取余运算符用于计算两个整数相除后的余数,其使用频率低于除法,但规则特殊,需重点掌握。

1. 核心运算规则

  • 操作数要求 :两个操作数必须均为整数类型 (int/short/long等),若出现浮点型操作数会直接编译报错。

  • 结果定义 :a % b的结果等于 a - (a / b) * b,其中 a / b遵循整数除法的向零取整规则。

  • 符号规则 :取余结果的符号始终与被除数一致,与除数的符号无关。

2. 关键特性

  • 当被除数的绝对值小于除数 时,取余结果等于被除数本身。例如:3 % 5 = 3,-3 % 5 = -3。

  • 当被除数能被除数整除时,取余结果为0。例如:6 % 3 = 0,-9 % 3 = 0。

3. 代码示例与解析

复制代码
#include <stdio.h>

int main() {
    printf("=== 取余运算符示例 ===\n");
    // 正数取余
    printf("13 %% 3 = %d\n", 13 % 3);    // 输出1,13 = 3 * 4 +1
    printf("3 %% 13 = %d\n", 3 % 13);    // 输出3,被除数小于除数
    printf("6 %% 3 = %d\n", 6 % 3);      // 输出0,整除

    // 含负数的取余(符号与被除数一致)
    printf("13 %% -3 = %d\n", 13 % -3);  // 输出1,被除数为正
    printf("-13 %% 3 = %d\n", -13 % 3);  // 输出-1,被除数为负
    printf("-13 %% -3 = %d\n", -13 % -3);// 输出-1,被除数为负
    printf("-3 %% 13 = %d\n", -3 % 13);  // 输出-3,被除数小于除数

    return 0;
}

注意 :在printf中输出百分号%时,需使用%%进行转义,否则会被识别为格式声明符。


三、核心易错点总结

  1. 整数除法的舍入陷阱 :不要将整数除法的结果误认为是四舍五入,例如7 / 2 = 3而非4,-7 / 2 = -3而非-4。

  2. 浮点除法的触发条件 :若需要保留小数结果,必须确保至少一个操作数为浮点型。例如计算1/3时,应写成1.0/3或1/3.0。

  3. 取余运算符的类型限制 :严禁对浮点型数据使用%运算符,例如5.0 % 3会导致编译错误。

  4. 余数符号的判断:牢记余数符号与被除数一致,与除数无关,这是最易混淆的规则。

  5. 被除数小于除数的情况 :当|a| < |b|时,a % b = a,例如2 % 5 = 2,-2 % 5 = -2。

相关推荐
青峰讲运维5 分钟前
OpenStack Heat 编排:用模板一键交付云业务,告别手动点页面
开发语言·php·openstack
pjj1985419 分钟前
YOLO 目标检测算法系列梳理:从 V1 到 V5 的原理演进
算法·yolo·目标检测
MyFreeIT26 分钟前
Python Windows Manual
开发语言·python
kiracrimson37 分钟前
STL:List的使用和模拟实现
开发语言·c++·list
2601_9611462040 分钟前
实验室用等离子表面处理设备处理汽车PP内饰件和PBT骨架的一点记录
笔记·汽车·设备
二十七日秋44 分钟前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法
星恒随风1 小时前
Linux Socket TCP编程(二):逐文件重构多进程、多线程与线程池服务器,深入fork、pthread_create、popen和std::bind
linux·服务器·笔记·学习·tcp/ip
晚风叙码1 小时前
Linux 进程概念(下):程序地址空间与虚拟内存
linux·服务器·算法
北冥you鱼1 小时前
Go 语言 GORM 使用 Preload:从关联查询到嵌套预加载的完整实践
开发语言·jvm·golang
silvamux_1 小时前
微头条爆款体平台适配实测:把交付要求变成可计算的指标
java·线性代数·算法·决策树·矩阵