C++11中 <cinttypes>的入門與精通

文章目錄

    • 一、`<cinttypes>` 是什么
      • 1. 固定寬度的整數類型
      • 2. 整數操作函數
      • 3. 格式化輸入輸出宏
    • 二、深入理解 `<cinttypes>`
      • 1. 固定寬度整數類型的使用
      • 2. 整數操作函數的使用
      • 3. 格式化輸入輸出宏的使用
    • 三、實踐和技巧
      • 1. 使用固定寬度整數類型的最佳實踐
      • 2. 使用整數操作函數的最佳實踐
      • 3. 使用格式化輸入輸出宏的最佳實踐
    • 四、總結
    • 五、`<cinttypes>` 的主要功能總結
      • 1. 固定寬度整數類型
      • 2. 整數操作函數
      • 3. 格式化輸入輸出宏
        • 輸出宏
        • 輸入宏
    • 六、`<cinttypes>` 的使用流程

在 C++11 中, <cinttypes> 是一個非常重要的標準庫頭文件,它為處理整數類型提供了強大的支持。

一、<cinttypes> 是什么

<cinttypes> 頭文件最初是 C 標準庫中的 <inttypes.h>,在 C++11 中被引入。它提供了固定寬度的整數類型、整數操作函數以及用于格式化輸入輸出的宏。這些功能對于處理不同平臺上的整數類型非常有幫助,尤其是在需要確保代碼的可移植性時。

1. 固定寬度的整數類型

<cinttypes> 中,定義了一系列固定寬度的整數類型,這些類型在不同平臺上具有相同的大小和范圍。例如:

  • std::int8_t:8 位有符號整數
  • std::int16_t:16 位有符號整數
  • std::int32_t:32 位有符號整數
  • std::int64_t:64 位有符號整數

這些類型確保了在不同平臺上,整數的大小和范圍是一致的,從而提高了代碼的可移植性。

2. 整數操作函數

<cinttypes> 提供了一些基本的整數操作函數,例如:

  • std::imaxabs:計算絕對值
  • std::imaxdiv:計算整數除法的商和余數

這些函數在處理整數時非常有用,尤其是在需要精確控制整數運算時。

3. 格式化輸入輸出宏

<cinttypes> 提供了一系列宏,用于格式化輸入輸出。這些宏可以與 std::fprintfstd::fscanf 等函數一起使用,確保在不同平臺上正確地格式化整數類型。例如:

  • PRId32:用于輸出 32 位有符號整數
  • PRIu64:用于輸出 64 位無符號整數

這些宏使得在不同平臺上格式化整數變得非常簡單。

二、深入理解 <cinttypes>

1. 固定寬度整數類型的使用

固定寬度整數類型在處理跨平臺問題時非常有用。例如,假設你需要在不同平臺上存儲和傳輸一個 32 位的整數,你可以使用 std::int32_t 來確保在所有平臺上這個整數的大小和范圍都是一致的。以下是一個簡單的例子:

#include <cinttypes>
#include <iostream>int main() {std::int32_t num = 123456789;std::cout << "The number is: " << num << std::endl;return 0;
}

在這個例子中,std::int32_t 確保了 num 在所有平臺上都是一個 32 位的整數。

2. 整數操作函數的使用

std::imaxabsstd::imaxdiv<cinttypes> 提供的兩個非常有用的函數。std::imaxabs 用于計算絕對值,而 std::imaxdiv 用于計算整數除法的商和余數。以下是一個使用這些函數的例子:

#include <cinttypes>
#include <iostream>int main() {std::intmax_t num = -123456789;std::intmax_t abs_num = std::imaxabs(num);std::cout << "The absolute value is: " << abs_num << std::endl;std::intmax_t numer = 123456789;std::intmax_t denom = 10;std::imaxdiv_t div_result = std::imaxdiv(numer, denom);std::cout << "The quotient is: " << div_result.quot << std::endl;std::cout << "The remainder is: " << div_result.rem << std::endl;return 0;
}

在這個例子中,std::imaxabs 計算了 num 的絕對值,而 std::imaxdiv 計算了 numerdenom 的商和余數。

3. 格式化輸入輸出宏的使用

<cinttypes> 提供的格式化輸入輸出宏可以與 std::fprintfstd::fscanf 等函數一起使用。這些宏確保了在不同平臺上正確地格式化整數類型。以下是一個使用這些宏的例子:

#include <cinttypes>
#include <cstdio>int main() {std::int32_t num = 123456789;std::printf("The number is: %" PRId32 "\n", num);std::int64_t big_num = 1234567890123456789;std::printf("The big number is: %" PRId64 "\n", big_num);return 0;
}

在這個例子中,PRId32PRId64 宏確保了 numbig_num 在不同平臺上正確地格式化為 32 位和 64 位整數。

三、實踐和技巧

1. 使用固定寬度整數類型的最佳實踐

在使用固定寬度整數類型時,以下是一些最佳實踐:

  • 明確需求:在選擇整數類型時,明確你的需求。如果只需要 8 位整數,就使用 std::int8_t,而不是更大的類型。
  • 考慮可移植性:固定寬度整數類型的主要優勢是可移植性。確保在所有目標平臺上使用相同的類型。
  • 避免隱式類型轉換:在使用固定寬度整數類型時,避免隱式類型轉換。如果需要轉換,顯式地進行類型轉換。

2. 使用整數操作函數的最佳實踐

在使用整數操作函數時,以下是一些最佳實踐:

  • 檢查輸入:在使用 std::imaxdiv 等函數時,確保輸入的值是有效的。例如,避免除以零。
  • 使用常量表達式:在可能的情況下,使用常量表達式來提高性能。例如,std::imaxabsstd::imaxdiv 都可以作為常量表達式使用。

3. 使用格式化輸入輸出宏的最佳實踐

在使用格式化輸入輸出宏時,以下是一些最佳實踐:

  • 使用正確的宏:確保使用正確的宏來格式化整數類型。例如,使用 PRId32 來格式化 std::int32_t,使用 PRIu64 來格式化 std::uint64_t
  • 避免硬編碼格式字符串:使用宏來避免硬編碼格式字符串。這可以提高代碼的可讀性和可維護性。

四、總結

<cinttypes> 是 C++11 中一個非常重要的標準庫頭文件,它提供了固定寬度的整數類型、整數操作函數以及用于格式化輸入輸出的宏。通過使用這些功能,你可以確保代碼的可移植性和正確性。在實際開發中,遵循最佳實踐和高級技巧,可以讓你更好地利用 <cinttypes>,提高代碼的質量和性能。

五、<cinttypes> 的主要功能總結

1. 固定寬度整數類型

類型描述
std::int8_t8 位有符號整數
std::int16_t16 位有符號整數
std::int32_t32 位有符號整數
std::int64_t64 位有符號整數
std::uint8_t8 位無符號整數
std::uint16_t16 位無符號整數
std::uint32_t32 位無符號整數
std::uint64_t64 位無符號整數

2. 整數操作函數

函數描述
std::imaxabs計算絕對值
std::imaxdiv計算整數除法的商和余數

3. 格式化輸入輸出宏

輸出宏
描述
PRId8格式化 8 位有符號整數
PRId16格式化 16 位有符號整數
PRId32格式化 32 位有符號整數
PRId64格式化 64 位有符號整數
PRIu8格式化 8 位無符號整數
PRIu16格式化 16 位無符號整數
PRIu32格式化 32 位無符號整數
PRIu64格式化 64 位無符號整數
輸入宏
描述
SCNd8輸入 8 位有符號整數
SCNd16輸入 16 位有符號整數
SCNd32輸入 32 位有符號整數
SCNd64輸入 64 位有符號整數
SCNu8輸入 8 位無符號整數
SCNu16輸入 16 位無符號整數
SCNu32輸入 32 位無符號整數
SCNu64輸入 64 位無符號整數

六、<cinttypes> 的使用流程

開始
包含 頭文件
選擇固定寬度整數類型
使用整數操作函數
使用格式化輸入輸出宏
結束

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87148.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87148.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87148.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Pytorhc Lightning進階:一篇實例玩轉Pytorhc Lightning 讓訓練更高效

Pytorhc Lightning進階&#xff1a;一篇實例玩轉Pytorhc Lightning 讓訓練更高效 Pytorhc Lightning 主要包含以下幾大類&#xff0c;主要圍繞以下講解&#xff1a; 模型&#xff0c;PyTorch Lightning 的核心是繼承 pl.LightningModule數據&#xff0c;數據模塊繼承pl.Light…

大模型算法面試筆記——注意力Transformer流程/面試題篇

學習資料來源于字母站大學 1 Transformer架構 基于編碼器-解碼器的架構來處理序列對。跟使用注意力的seq2seq不同&#xff0c;Transformer是基于純注意力。 2 注意力 2.1 自注意力機制 使用注意力&#xff1a;需要根據整個序列進行預測&#xff0c;對于同一input&#xf…

Rust 定義與實例化結構體

文章目錄 Rust 定義與實例化結構體5.1 結構體的定義與意義5.2 結構體實例化5.2.1 基本實例化5.2.2 可變性規則5.2.3 字段初始化簡寫5.2.4 結構體更新語法 5.3 特殊結構體類型5.3.1 元組結構體&#xff08;Tuple Struct&#xff09;5.3.2 類單元結構體&#xff08;Unit-Like Str…

ELK日志分析系統(filebeat+logstash+elasticsearch+kibana)

一、ELK 平臺介紹 1、ELK 概述 日志主要包括系統日志、應用程序日志和安全日志。系統運維和開發人員可以通過日志了解服務器軟硬件信息、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日志可以了解服務器的負荷&#xff0c;性能安全性&#xff0c;從而及時采取措施糾正錯誤。…

JS基礎4—jQuery

jQuery常用內容 jQuery 介紹jQuery 獲取方式基本選擇器 (最常用)層級選擇器 (基于元素間關系)過濾選擇器 (基于特定條件) jQuery事件綁定jQuery 方法調用jQuery遍歷jQuery 獲取與設置jQuery 添加與刪除jQuery CSS 類jQuery - AJAX 總結 jQuery 介紹 jQuery 是一個輕量級、快速…

時鐘周期是什么?

時鐘周期&#xff08;Clock Cycle&#xff09;是什么&#xff1f; 時鐘周期&#xff08;Clock Cycle&#xff09;是計算機系統中一個最基礎的時間單位&#xff0c;也稱為時鐘節拍或時鐘周期時間&#xff08;Clock Period&#xff09;。它由系統時鐘發生器產生的一個周期性脈沖…

如何用SEO優化長尾關鍵詞?

內容概要 在SEO優化領域&#xff0c;長尾關鍵詞扮演著至關重要的角色&#xff0c;它們能有效提升網站在搜索引擎中的可見度和流量轉化率。本文將全面解析如何通過系統方法優化長尾關鍵詞&#xff0c;涵蓋從基礎理論到實戰應用的完整流程。核心內容包括利用專業工具進行關鍵詞挖…

電子面單系統開發全解析

一、如果要做電子面單系統&#xff0c;怎么做&#xff1f; 開發電子面單系統是一項復雜且涉及多方面考量的工程&#xff0c;涵蓋需求分析、系統架構設計、技術選型、接口對接、安全性保障、第三方服務選擇以及部署與維護等關鍵環節。 電子面單系統開發步驟 需求分析&#xf…

UE5 - 制作《塞爾達傳說》中林克的技能 - 18 - 磁力抓取器

讓我們繼續《塞爾達傳說》中林克技能的制作!!! UE版本:5.6.0 VS版本:2022 本章節的核心目標:磁力抓取器 先讓我們看一下完成后的效果: 18_磁力抓取器 大綱如下: 引言功能架構與核心邏輯物理材質與場景配置代碼實現:從識別到操控操作說明1.引言 在《塞爾達傳說》中,林…

基于ApachePOI實現百度POI分類快速導入PostgreSQL數據庫實戰

目錄 前言 一、百度POI分類簡介 1、數據表格 2、分類結構 二、從Excel導入到PG數據庫 1、Excel解析流程 2、數據入庫 3、入庫成果及檢索 三、總結 前言 在上一篇博文中&#xff0c;我們對高德POI分類進行了深入剖析 并對Excel 中 POI 分類數據的存儲結構特點進行了詳細介…

學習經驗分享【41】YOLOv13:基于超圖增強自適應視覺感知的實時目標檢測

YOLO算法更新速度很快&#xff0c;已經出到V13版本&#xff0c;后續大家有想發論文或者搞項目可更新自己的baseline了。 摘要&#xff1a;YOLO 系列模型憑借其卓越的精度和計算效率&#xff0c;在實時目標檢測領域占據主導地位。然而&#xff0c;YOLOv11 及早期版本的卷積架構&…

Handling outliers in non-blind image deconvolution論文閱讀

Handling outliers in non-blind image deconvolution 1. 研究目標與實際意義2. 創新方法:基于EM的異常值建模2.1 新模糊模型2.1.1 目標函數2.2 EM框架:迭代優化二元掩碼2.2.1 E步:計算后驗權重 E [ m x ] E[m_x] E[mx?]2.2.2 M步:加權正則化反卷積2.3 優化加速技術2.3.1…

Redis 功能擴展:Lua 腳本對 Redis 的擴展

Redis 是一個高性能的內存數據庫&#xff0c;支持多種數據結構&#xff0c;如字符串、哈希、列表、集合和有序集合。為了增強其功能&#xff0c;Redis 引入了 Lua 腳本支持&#xff0c;使開發者可以編寫自定義的腳本&#xff0c;確保操作的原子性并提高復雜操作的性能。本文將詳…

七天學完十大機器學習經典算法-06.支持向量機(SVM):分類邊界的藝術——深入淺出指南

接上一篇《七天學完十大機器學習經典算法-05.從投票到分類&#xff1a;K近鄰(KNN)算法完全指南》 想象你要在操場上為兩個班級劃活動區域&#xff0c;如何畫出一條最公平的分界線&#xff1f;這條線不僅要分開兩班學生&#xff0c;還要讓兩個班都離分界線盡可能遠——這就是支持…

python如何安裝PyQt6-stubs依賴包

PyQt6-stubs 是為 PyQt6 提供類型提示&#xff08;Type Hints&#xff09;和 IDE 智能補全支持的第三方補丁包&#xff0c;特別適用于 PyCharm、VS Code 等現代 IDE。它對開發者在編碼時幫助極大。 一、安裝方法 需要提前安裝好git&#xff0c;然后克隆PyQt6-stubs源碼&#xf…

創宇智腦 MCP 賦能 AiPy,IP 風險調查效率實現 10 倍飛躍,威脅分析一鍵生成

還記得上個月那個焦頭爛額的凌晨三點嗎&#xff1f;監控大屏突然瘋狂閃爍&#xff0c;500 多個 IP 地址同時出現異常訪問&#xff0c;密密麻麻的數據流在屏幕上跳動&#xff0c;像極了一張讓人窒息的大網。我和團隊成員瞪著布滿血絲的眼睛&#xff0c;手動排查每一個 IP&#x…

使用SRS+ffmpeg實現https推流flv

1修改SRS的live.conf配置如下&#xff1a; # Live streaming config for SRS. # see full.conf for detail config.listen 1935; max_connections 1000; srs_log_tank console; daemon off;http_api {enabled on;listen …

力扣網編程題:合并兩個有序數組(雙指針解法)

一. 簡介 上一篇文章對"合并兩個有序數組"題目&#xff0c;使用了暴力解法&#xff0c;算法時間復雜度比較高。文章如下&#xff1a; 力扣網編程題&#xff1a;合并兩個有序數組&#xff08;直接解法&#xff09;-CSDN博客 本文滿足進階要求&#xff0c;算法時間復…

數據結構之 【樹的簡介】(樹的(相關)概念、二叉樹的概念、部分性質、滿二叉樹、完全二叉樹)

目錄 1.樹的概念及結構 1.1樹的概念 1.2樹的相關概念 1.3樹的表示 1.4樹在實際中的應用 2.二叉樹概念及結構 2.1二叉樹的概念 2.2特殊的二叉樹 2.3二叉樹的性質 2.4應用題 1.樹的概念及結構 1.1樹的概念 樹是一種非線性的數據結構&#xff0c;由 n&#xff08;n…

Redis-7.4.3-Windows-x64下載安裝使用

Redis軟件包下載地址鏈接&#xff1a;https://github.com/redis-windows/redis-windows/releases 檢查或者修改配置文件redis.conf&#xff1a; #如果允許外部其他主機訪問本機redis&#xff0c;設置成&#xff1a;bind 0.0.0.0 bind 127.0.0.1 protected-mode yes #設置端口…