尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
为什么 printf(“%d“, 5/2) 输出 2 不是 2.5?C语言整数除法陷阱
为什么 printf(“%d”, 5/2) 输出 2 不是 2.5C语言的整数除法陷阱你有没有遇到过这种情况#includestdio.hintmain(){printf(%d\n,5/2);// 输出 2不是 2.5printf(%d\n,10/3);// 输出 3不是 3.333...printf(%d\n,1/2);// 输出 0return0;}很多人刚开始学 C 语言看到1 / 2 0整个人都懵了——哪怕是小学数学也知道一除以二等于零点五啊。但这个结果不是 bug是 C 语言设计者有意为之的「整数除法」。今天 3 分钟彻底搞懂。一句话结论整数 / 整数 整数小数部分直接被丢弃C 语言里两个整数相除结果一定是整数。计算过程是5 / 2 2.5 → 去掉小数 → 2 10 / 3 3.333... → 去掉小数 → 3 1 / 2 0.5 → 去掉小数 → 0不是四舍五入是直接截断truncation一刀切掉小数部分。画个图就清楚了5 / 2 的计算过程 ┌───┬───┬───┬───┬───┐ │ 1 │ 2 │ 3 │ 4 │ 5 │ 5 个苹果 └───┴───┴───┴───┴───┘ 每 2 个一组 ┌───┬───┐ ┌───┬───┐ ┌───┐ │ 1 │ 2 │ │ 3 │ 4 │ │ 5 │ ← 剩下的 1 个不够一组 └───┴───┘ └───┴───┘ └───┘ 第1组 第2组 被丢弃 结果 2组数不是 2.5那我想得到 2.5 怎么办// 方法一把其中一个操作数变成浮点数printf(%f\n,5.0/2);// 2.500000printf(%f\n,5/2.0);// 2.500000// 方法二强制类型转换printf(%f\n,(double)5/2);// 2.500000// 方法三两个都转printf(%f\n,5.0/2.0);// 2.500000只要除法表达式里有一个是浮点数C 语言就会自动做浮点除法。这个坑不止在输出时doubleresult5/2;// result 2.0不是 2.5printf(%f\n,result);// 输出 2.000000为什么因为5 / 2先算整数除法得 2然后才把 2 转成 double 赋值。转换发生在除法之后太迟了。正确写法doubleresult5.0/2;// result 2.5// 或者doubleresult(double)5/2;// result 2.5一张表记住表达式结果原因5 / 22整数除法截断5.0 / 22.5浮点除法5 / 2.02.5浮点除法5.0 / 2.02.5浮点除法1 / 20最容易踩的坑(double)5 / 22.5显式类型转换double x 5/22.0先整除再赋值来不及记住一句话C 语言里两个整数相除小数部分会被直接丢弃不是四舍五入。想要小数结果至少让一个操作数变成浮点数。理解了这条规则你也就明白了为什么1 / 2等于 0——不是数学错了是类型决定了计算方式。你还被哪些反直觉的 C 语言结果坑过评论区聊聊。#c语言 #算法 #数据结构
RELATED

相关推荐

ClaudeAgent】并发-后台任务

ClaudeAgent】并发-后台任务

Java实现代码javapublic class BackgroundTasksSystem {// --- 配置 ---private static final Path WORKDIR Paths.get(System.getProperty("user.dir"));private static final Gson gson new GsonBuilder().setPrettyPrinting().create();// --- 后台任务管理器 -…

📅 2026/9/2 2:26:29
Visual Studio 三月更新 —— 打造专属自定义 Agent

Visual Studio 三月更新 —— 打造专属自定义 Agent

造属于您自己的定制化 Agent想让 Copilot 遵循团队的编码规范、运行构建流水线,或是查询内部文档?自定义 Agent 就能实现这一切。这类专属 Copilot Agent 以 .agent.md 文件的形式定义在代码仓库中,可全面获取工作区信息、实现代码理解、调用…

📅 2026/9/18 22:06:50
RK3562 ISP图像调试—AWB标定

RK3562 ISP图像调试—AWB标定

目录 1、AWB标定基本原理 2、AWB raw图拍摄条件 3、AWB标定操作 1、AWB标定基本原理 主要是标定Raw在XY、UV、YUV的白点条件,单纯色算法参A数及标准光源下的白平衡增益 2、AWB raw图拍摄条件 标定 Raw 在 XY / UV / YUV 域的白点条件与标准光源下白平衡增益。必须先完成 …

📅 2026/9/11 20:53:31
MORE NEWS

更多资讯

📰

IBM x3650服务器固件升级全流程与避坑指南

服务器固件升级这件事,说大不大,说小也绝不小。我见过太多人把它当成"点一下下一步"的活儿,结果在机房蹲了半宿。这次拿一台老当益壮的 IBM System x3650 开刀,把整套固件升级的流程、坑点和判断逻辑完整走一遍。不管你…

📰

AN1078无传感器FOC工程指南:PMSM控制与启动调试

简介:MICROCHIP-AN1078.PDF 是 Microchip 关于家电用永磁同步电机(PMSM)无传感器磁场定向控制(FOC)的官方应用笔记,面向电机控制、家电电驱及 dsPIC DSC 开发人员。文档从六步控制的转矩波动与动态负载局限…

📰

openGauss检查点机制深度解析与生产环境优化

1. 数据库检查点机制基础认知第一次接触openGauss的运维工作时,我被checkpoint相关的报错日志搞得焦头烂额。那是在一个支付系统的凌晨维护窗口,突然出现的"checkpoint incomplete"警告直接触发了主备切换。这个经历让我深刻认识到&#xff0c…

📰

openGauss数据库checkpoint参数调优实战指南

1. 项目概述openGauss作为一款企业级开源关系型数据库,其性能调优一直是DBA们关注的重点。而在众多可调参数中,checkpoint相关的配置直接影响着数据库的写入性能和崩溃恢复效率。我在实际运维中遇到过不少因checkpoint配置不当导致的性能问题——有一次生…

📰

Paperclip:Node.js驱动的AI工具链胶水层设计与实战

1. 项目概述:Paperclip 不是回形针,而是一个被严重误读的 AI 工程实践入口“Paperclip”这个词在中文技术社区里,最近半年正经历一场诡异的语义漂移。它不再指代办公桌上那个弯折金属丝制成的物理小物件,而是悄然演变成一个高频出…

📰

Linux GPIO中断注册与读取:设备树、request_irq与消抖

按键按下去了,示波器上电平干净利落地从高电平掉到地,/sys/class/gpio里value也能读到 0,可驱动里的中断处理函数就是不进——这个场景我见过太多次,问的人一半卡在设备树,一半卡在触发类型和消抖。GPIO 读取和中断注册…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬