C 数据溢出与精度丢失

发布时间:2026/10/15 5:38:12

C 数据溢出与精度丢失 有符号 short 溢出有符号整数溢出属于未定义行为#includestdio.hintmain(){shortnum0x7FFF;printf(%hd \r\n,num);num0x8000;printf(%hd \r\n,num);return0;}short2 字节 16bit默认signed有符号○ 范围-2^15 ~ 2^15-1即 -32768 ~ 32767○ 0x7FFF二进制0111 1111 1111 1111 → 32767最大值○ 0x8000二进制1000 0000 0000 0000 → -32768最小值调试自增演示shortnum32767;num;// 32767 1二进制进位最高位变成1printf(%hd,num);// 输出 -32768● 汇编movsx eax, word ptr [num]● movsx符号位扩展把 16 位 short 扩展到 32 位 eax● 最高位是 1代表负数最高位 0 代表正数⚠️重点C 标准里有符号整数溢出是 UB未定义行为只是在 VC/VS 编译器下会按补码回绕不同编译器 / 优化等级结果可能不一样无符号 unsigned int 溢出标准定义模 2^n 取余行为确定#includestdio.hintmain(){unsignedintnum4294967295;printf(%u \r\n,num);num;printf(%u \r\n,num);return0;}unsigned int4 字节 32bit无符号○ 范围0 ~2^32-1最大值0xFFFFFFFF 4294967295○ 0xFFFFFFFF 1 0x100000000○ 只有 32 位存储空间丢弃进位的最高位 1剩余0x00000000结果 0✅重点无符号整数溢出是 C 标准明确定义的自动对2^32取模一定会回绕反汇编核心片段解析mov dword ptr[num],0FFFFFFFFh;给num赋值0xFFFFFFFFmov eax,dword ptr[num]push eax push offset string%u \r\ncall _printf add esp,8mov eax,dword ptr[num]add eax,1;eaxeax1mov dword ptr[num],eax;写回栈超出32bit的进位直接丢弃● add eax,1 加法指令本身会产生进位标志 CF但存储到 32 位变量时超出的进位不会保存直接截断对比总结表类型字节溢出行为C 标准规定signed short2327671 → -32768未定义行为 UB仅 VC 下补码回绕unsigned int442949672951 → 0确定模2^32截断补充易错点不要依赖有符号数溢出回绕写代码开启 O2 优化后结果可能完全改变溢出本质固定 bit 宽度加法进位超出存储空间发生截断有符号还要额外解释最高位为符号位movsx符号扩展vs movzx零扩展○ movsx有符号类型扩展高位补符号位○ movzx无符号类型扩展高位补 0
延伸阅读

更多相关文章

2026/10/15 5:33:12

电容触摸按键灵敏度调试指南:原理、参数与实战避坑

简介:面向电磁炉及家电控制面板的硬件/嵌入式开发者,这份资料系统讲解电容触摸按键的原理与调试方法。内容先分析感应按键电路,说明信号产生单元输出约几百KHz、占空比约50%的高电平信号,再经信号整形单元处理后送入MCU的AD口&…

2026/10/15 5:33:12

Agent能力拆解:会话、工具、MCP、记忆四模块实战

我先破了题再落笔。“Hermes Agent能力篇:会话、工具、MCP、记忆”这个标题,核心不是某个具体实现版本号,而是构建一个可用、可信、可扩展的智能体骨架时,四个绕不开的底层模块:会话能力管的是“怎么把天聊下去”&…

2026/10/15 5:33:12

labelImg弹孔标注实战:Windows离线安装与YOLO数据生成指南

1. 为什么弹孔标注必须用labelImg,而不是随手截图画框?在某高校图像处理实验室做模拟项目X时,我接手了一个看似简单实则暗坑密布的任务:给一批高分辨率靶纸图像中的弹孔位置打标签。最开始,团队里有位A同学直接用系统自…

2026/10/15 22:05:47

Ubuntu安装Docker完整指南:从环境预检到排错实战

从零开始:Ubuntu 装机路上的一次 Docker 安装记录作为一个长期折腾 Linux 桌面和服务器的用户,我几乎每次重装系统都要和 Docker 打交道。这篇文章是我前段时间在一台全新的 Ubuntu 设备上安装 Docker 的完整记录,包含了每一步操作的背后逻辑…

2026/10/15 22:05:47

Qt网络上传实战:QNetworkAccessManager与multipart文件上传全解析

写 Qt 网络上传这事儿其实有点意思。很多人刚开始用 Qt 做 HTTP 请求时,第一反应是去翻 QNetworkAccessManager 的文档,然后照着示例抄一段 post() 代码,结果发现要么服务端收不到参数,要么上传大文件时界面直接卡死。这篇文章就围…

2026/10/15 22:05:47

2核4G+10M带宽云服务器:选型、部署与运维全指南

先说结论:这套配置是被无数人验证过的甜点位,但它并不是万金油。买之前如果没搞清楚自己要跑什么,再便宜的机器也是浪费;反过来,只要负载画像匹配,2核4G10M带宽跑三四个轻量服务依然游刃有余。这篇文章就围…

2026/10/15 22:05:47

装配线平衡问题的遗传算法MATLAB实现与源码解析

简介:一份用于装配生产线任务平衡问题(ALB)的遗传算法MATLAB源代码,面向工业工程、机械制造与智能计算方向的科研人员及学生。算法在陈永卿等提出的混合遗传算法基础上改进,支持任务优先矩阵、任务时间与体积属性、时间…

2026/10/15 22:05:47

微机原理实战:车辆测速实验贯通定时器、中断、ADC与I/O

简介:本资源是一份面向高校电子类、自动化及物联网专业学生的《微机原理与接口技术》课程实践报告,聚焦智慧交通场景下的车辆测速系统设计与实现,帮助学习者贯通CPU、I/O接口、定时器(8254/8253)、并行接口&#xff08…

2026/10/15 22:00:46

GLM-OCR 0.9B 生产环境部署与调优实战:从精度到并发

文档智能这个方向这两年热度一直不低,但真正落到生产环境里,OCR 这一环始终是个绕不开的坎。我接触过不少团队,模型选型阶段兴致勃勃,Demo 跑得漂漂亮亮,一到上线就各种翻车:识别精度在真实票据上断崖式下跌…

2026/10/14 11:31:03

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/14 17:41:07

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/15 13:42:16

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/15 0:02:22

防关联浏览器哪个好?三款产品实测差异解析

新手做多店铺,最纠结的就是防关联浏览器选哪个。飞跨、网易、站斧这三款被问得最多,先给结论:要一体化省心、长期便宜,选站斧;要网易招牌和稳,选网易;预算紧做东南亚 Lazada,选飞跨。…

2026/10/15 0:02:22

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成 一、技术背景 大模型(LLM)在通用场景下表现强大,但当我们将 GPT-4 或 Qwen 直接用于生成影刀RPA操作指令和 XPath 定位时,准确率通常只有 40%-60%。原因…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑