【C/C++】深入理解整型截断与提升:原理、应用与区别

文章目录

    • 1. 整形截断(Integer Truncation)
      • 1.1 整形截断的例子
      • 1.2 整形截断的细节
    • 2. 整形提升(Integer Promotion)
      • 2.1 整形提升的规则
      • 2.2 整形提升的示例
      • 2.3 整形提升的实际应用
      • 2.4 整型提升与标准操作符
    • 3. 整型截断与提升的区别
    • 4. 总结


1. 整形截断(Integer Truncation)

整形截断是指在将一个较大范围的数值类型(如浮点数或大范围的整数类型)转换为较小范围的整数类型时,数据的高位部分被丢弃,只保留低位的部分。这通常发生在强制类型转换时,导致数据的精度丧失。

1.1 整形截断的例子

考虑将一个浮点数转换为整数类型,或将一个大范围整数类型转换为较小的整数类型。小数部分或高位部分会被截断,导致数据丢失。

#include <iostream>int main() {double pi = 3.14159;int truncatedPi = (int)pi;  // 强制将 double 转换为 intstd::cout << "Truncated Pi: " << truncatedPi << std::endl;  // 输出 3return 0;
}

在上面的例子中,pi 的值为 3.14159,在将其转换为 int 时,小数部分 .14159 被丢弃,只保留整数部分 3。这种转换行为称为整形截断

1.2 整形截断的细节

整形截断的常见场景包括:

  • 浮点数转换为整数:如上例所示,doublefloat 类型转换为 int 时,会截断小数部分。
  • 整数类型转换:当较大的整数类型(如 long)被转换为较小的整数类型(如 int),超出目标类型表示范围的高位部分会丢失。例如,将一个 long 类型的数据转换为 short 类型,可能会丢失高位数据。
#include <iostream>int main() {long largeNumber = 9876543210;short smallNumber = (short)largeNumber;  // 将 long 转换为 short,发生截断std::cout << "Truncated number: " << smallNumber << std::endl;  // 输出:截断后的小数字段return 0;
}

这种截断可能会导致数据的溢出或逻辑错误,因此需要小心处理。


2. 整形提升(Integer Promotion)

整形提升是指在运算过程中,较小的整型数值会被自动提升为较大的整型数值。这种行为通常发生在参与算术运算时,C/C++编译器会根据整型提升规则自动将较小的整数类型提升为 int 类型或更大的数据类型。

整形提升规则确保算术运算中的精度不会丢失,并且避免了低位类型之间的溢出。

2.1 整形提升的规则

C/C++ 中的整形提升规则如下:

  1. charshort 提升为 int:如果一个 charshort 类型的数值参与算术运算,它会被提升为 int 类型。这是因为 int 足够大,能够容纳 charshort 类型的数值范围。
  2. 如果 int 不足以容纳数值,提升为 long 或更高的数据类型:如果计算涉及到的数据超出了 int 类型的范围(例如使用 64 位数值),则会提升为 longlong long 类型。
  3. 不同类型的算术运算会将结果提升为较大的类型:在表达式中,如果参与运算的数值类型不同,C/C++ 会将较小的类型提升为较大的类型,通常会提升到 intlong

2.2 整形提升的示例

下面是整形提升的例子:

#include <iostream>int main() {char a = 5;short b = 10;int result = a + b;  // a 和 b 都会被提升为 int 类型std::cout << "Result of a + b: " << result << std::endl;  // 输出 15return 0;
}

在这个例子中,achar 类型,bshort 类型。在执行加法运算时,它们会被自动提升为 int 类型,避免了加法过程中由于数据溢出带来的问题。

2.3 整形提升的实际应用

整形提升常用于以下几种情况:

  • 算术运算:整形提升使得算术运算(如加法、减法、乘法、除法等)过程中,较小的数据类型被自动提升为 int 类型,保证了计算的精度和正确性。例如,charshort 被提升为 int 后进行加法运算,可以避免加法时发生溢出。

  • 混合类型运算:当一个表达式中涉及到不同大小的整型时,C/C++ 会自动进行类型提升以确保计算结果的准确性。例如,charint 相加时,char 会被提升为 int,结果也会是 int 类型。

2.4 整型提升与标准操作符

例如,在 C++ 中,默认情况下,所有整数运算(包括加法、减法、乘法等)都将小整数类型(如 charshort)提升为 int

#include <iostream>int main() {char c = 10;short s = 20;int result = c * s;  // c 和 s 被提升为 int,运算结果是 int 类型std::cout << "Multiplication result: " << result << std::endl;  // 输出 200return 0;
}

在上面的代码中,cchar 类型,sshort 类型,在执行乘法运算时,它们都被提升为 int 类型进行计算,确保结果不会丢失精度。


3. 整型截断与提升的区别

概念整型截断整型提升
定义数据从较大类型转换到较小类型时,高位数据被丢弃。较小类型的数据在算术运算中自动提升为较大的类型。
常见场景浮点数转换为整数,较大整数类型转换为较小类型。charshort 类型自动提升为 int
影响可能导致数据丢失、精度丧失或溢出。保证算术运算精度,不会发生数据溢出。
例子double 转换为 int,小数部分被截断。charshort 在加法运算中提升为 int 类型。

4. 总结

  • 整型截断 是当较大类型转换为较小类型时,数据的高位部分被丢弃。它可能会导致数据丢失或溢出,开发者需要小心使用。
  • 整型提升 是在算术运算中,较小的整数类型会被提升为 int 类型或更大的类型,避免了精度丧失或溢出,保证了计算结果的正确性。

理解这些概念,尤其是在进行类型转换和数值计算时,可以帮助开发者更好地处理数据类型,避免错误和不必要的性能问题。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/76845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python蓝桥杯备赛常用算法模板

一、python基础 &#xff08;一&#xff09;集合操作 s1 {1,2,3} s2{3,4,5} print(s1|s2)#求并集 print(s1&s2)#求交集 #结果 #{1, 2, 3, 4, 5} #{3}&#xff08;二&#xff09;对多维列表排序 1.新建列表 list1[[1,2,3],[2,3,4],[0,3,2]] #提取每个小列表的下标为2的…

【模块化拆解与多视角信息3】教育背景:学历通胀时代的生存法则

教育背景:学历通胀时代的生存法则 写在最前 作为一个中古程序猿,我有很多自己想做的事情,比如埋头苦干手搓一个低代码数据库设计平台(目前只针对写java的朋友),比如很喜欢帮身边的朋友看看简历,讲讲面试技巧,毕竟工作这么多年,也做到过高管,有很多面人经历,意见还算…

uniapp实现H5页面麦克风权限获取与录音功能

1.权限配置 在uni-app开发H5页面时&#xff0c;需要在manifest.json文件中添加录音权限的配置。具体如下&#xff1a; {"h5": {"permissions": {"scope.record": {"desc": "请授权使用录音功能"}}} }这段配置代码是用于向…

功能丰富的PDF处理免费软件推荐

软件介绍 今天给大家介绍一款超棒的PDF工具箱&#xff0c;它处理PDF文档的能力超强&#xff0c;而且是完全免费使用的&#xff0c;没有任何限制。 TinyTools&#xff08;PC&#xff09;这款软件&#xff0c;下载完成后即可直接打开使用。在使用过程中&#xff0c;操作完毕后&a…

鸿蒙开发-ArkUi控件使用

2.0控件-按钮 2.1.控件-文本框 Text(this.message).fontSize(40) // 设置文本的文字大小.fontWeight(FontWeight.Bolder) // 设置文本的粗细.fontColor(Color.Red) // 设置文本的颜色------------------------------------------------------------------------- //设置边框Tex…

深入理解 ResponseBodyAdvice 及其应用

ResponseBodyAdvice 是 Spring MVC 提供的一个强大接口&#xff0c;允许你在响应体被写入 HTTP 响应之前对其进行全局处理。 下面我将全面介绍它的工作原理、使用场景和最佳实践。 基本概念 接口定义 public interface ResponseBodyAdvice<T> {boolean supports(Metho…

深度解析Redis过期字段清理机制:从源码到集群化实践 (一)

深度解析Redis过期字段清理机制&#xff1a;从源码到集群化实践 一、问题本质与架构设计 1.1 过期数据管理的核心挑战 Redis连接池时序图技术方案 ​​设计规范&#xff1a;​ #mermaid-svg-Yr9fBwszePgHNnEQ {font-family:"trebuchet ms",verdana,arial,sans-se…

数据库ocm有什么用

专业能力的权威象征 。技术水平的高度认可&#xff1a;OCM 是 Oracle 认证体系中的最高级别&#xff0c;代表着持证人在 Oracle 数据库领域具备深厚的专业知识和卓越的实践技能。它证明持证人能够熟练掌握数据库的安装、配置、管理、优化、备份恢复等核心技术&#xff0c;并且能…

无人船 | 图解基于视线引导(LOS)的无人艇制导算法

目录 1 视线引导法介绍2 LOS制导原理推导3 Lyapunov稳定性分析4 LOS制导效果 1 视线引导法介绍 视线引导法&#xff08;Line of Sight, LOS&#xff09;作为无人水面艇&#xff08;USV&#xff09;自主导航领域的核心技术&#xff0c;通过几何制导与动态控制深度融合的机制&am…

Swift观察机制新突破:如何用AsyncSequence实现原子化数据监听?

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

【KWDB创作者计划】_KWDB部署与使用详细版本

KWDB发展历程 介绍KWDB前&#xff0c;先介绍下KaiwuDB&#xff0c; KaiwuDB 是浪潮控股的数据库企业&#xff0c;该企业提供的KaiwuDB数据库是一款分布式多模数据库产品&#xff0c;主要面向工业物联网、数字能源、车联网、智慧产业等行业领域。 在2024年7月&#xff0c; Kai…

Go:接口

接口既约定 Go 语言中接口是抽象类型 &#xff0c;与具体类型不同 &#xff0c;不暴露数据布局、内部结构及基本操作 &#xff0c;仅提供一些方法 &#xff0c;拿到接口类型的值 &#xff0c;只能知道它能做什么 &#xff0c;即提供了哪些方法 。 func Fprintf(w io.Writer, …

一、Appium环境安装

找了一圈操作手机的工具或软件&#xff0c;踩了好多坑&#xff0c;最后决定用这个工具(影刀RPA手机用的也是这个)&#xff0c;目前最新的版本是v2.17.1&#xff0c;是基于nodejs环境的&#xff0c;有两种方式&#xff0c;我只试了第一种方式&#xff0c;第二种方式应该是比较简…

【玩转全栈】—— Django 连接 vue3 保姆级教程,前后端分离式项目2025年4月最新!!!

本文基于之前的一个旅游网站&#xff0c;实现 Django 连接 vue3&#xff0c;使 vue3 能携带 CSRF Token 发送 axios 请求给后端&#xff0c;后端再响应数据给前端。想要源码直接滑倒底部。 目录 实现效果 解决跨域 获取 csrf-token 什么是 csrf-token &#xff1f; CSRF攻击的…

dify部署,ollama部署,拉取模型,创建ai聊天应用

dify下载安装 dify1.0.1 windos安装包百度云盘地址 通过网盘分享的文件&#xff1a;dify-1.0.1.zip 链接: 百度网盘 请输入提取码 提取码: 1234 dify安装包 linux安装包百度云盘地址 通过网盘分享的文件&#xff1a;dify-1.0.1.tar.gz 链接: 百度网盘 请输入提取码 提取码…

docx文档转为pdf文件响应前端

1、转换文件&#xff08;docx~pdf&#xff09; 1.引入pom依赖 <dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>20.12.0</version> </dependency>2.读取docx文档数据-转换 // 初…

网络安全中信息收集需要收集哪些信息了?汇总

目录 1. 域名信息 2. IP地址与网络信息 3. 备案与注册信息 4. Web应用与中间件信息 5. 操作系统与服务器信息 6. 敏感文件与配置文件 7. 社交工程信息 8. 证书与加密信息 9. API与接口信息 10. 外部威胁情报 11. 历史数据与缓存 常用工具与技术&#xff1a; 在网络…

【锂电池SOH预测】PSO-BP锂电池健康状态预测,锂电池SOH预测(Matlab完整源码和数据)

预测效果 基于PSO-BP算法的锂电池健康状态预测研究 一、引言 1.1 研究背景与意义 在当今社会&#xff0c;锂电池凭借其高能量密度、长寿命及环境友好等特性&#xff0c;在现代能源系统中占据着举足轻重的地位。从消费电子领域如智能手机、笔记本电脑&#xff0c;到动力领域中…

智能车摄像头开源—9 动态权、模糊PID、速度决策、路径优化

目录 一、前言 二、动态权 1.概述 2.偏差值加动态权 三、模糊PID 四、速度决策 1.曲率计算 2.速度拟合 3.速度控制 五、路径 六、国赛视频 一、前言 在前中期通过识别直道、弯道等元素可进行加减速操作实现速度的控制&#xff0c;可进一步缩减一圈的运行速度&#xff…

过往记录系列 篇五:市场黑天鹅事件历史梳理

文章目录 系列文章文章地址文章摘要文章预览系列文章 过往记录系列 篇一:牛市板块轮动顺序梳理 过往记录系列 篇二:新年1月份(至春节前)行情历史梳理 过往记录系列 篇三:春节行情历史梳理 过往记录系列 篇四:年报月行情历史梳理 文章地址 原文审核不通过(理由:“违反…