【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.pswp.cn/bicheng/76845.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76845.shtml
英文地址,請注明出處:http://en.pswp.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月份(至春節前)行情歷史梳理 過往記錄系列 篇三:春節行情歷史梳理 過往記錄系列 篇四:年報月行情歷史梳理 文章地址 原文審核不通過(理由:“違反…