C++标准模板(STL)- 类型支持 (定宽整数类型)(INT8_C,INTMAX_C,UINT8_C,UINTMAX_C,格式化宏常量)

news2024/11/18 5:39:21

最小宽度整数常量的函数宏

INT8_CINT16_CINT32_CINT64_C

展开成拥有其实参所指定的值且类型分别为 int_least8_t、int_least16_t、int_least32_t、int_least64_t 的整数常量表达式
(宏函数)

INTMAX_C

展开成拥有其实参所指定的值且类型为 intmax_t 的整数常量表达式
(宏函数)

UINT8_CUINT16_CUINT32_CUINT64_C

展开成拥有其实参所指定的值且类型分别为 uint_least8_t、uint_least16_t、uint_least32_t、uint_least64_t 的整数常量表达式
(宏函数)

UINTMAX_C

展开成拥有其实参所指定的值且类型为 uintmax_t 的整数常量表达式
(宏函数)

调用示例

#include <iostream>
#include <cstdint>

int main()
{
    //展开成拥有其实参所指定的值且类型分别为 int_least8_t、int_least16_t、
    //int_least32_t、int_least64_t 的整数常量表达式
    std::cout << "INT8_C(8):            " << INT8_C(8) << std::endl;
    std::cout << "INT16_C(16):          " << INT16_C(16) << std::endl;
    std::cout << "INT32_C(32):          " << INT32_C(32) << std::endl;
    std::cout << "INT64_C(64):          " << INT64_C(64) << std::endl;
    std::cout << std::endl;

    //展开成拥有其实参所指定的值且类型分别为 uint_least8_t、uint_least16_t、
    //uint_least32_t、uint_least64_t 的整数常量表达式
    std::cout << "UINT8_C(8):           " << UINT8_C(8) << std::endl;
    std::cout << "UINT16_C(16):         " << UINT16_C(16) << std::endl;
    std::cout << "UINT32_C(32):         " << UINT32_C(32) << std::endl;
    std::cout << "UINT64_C(64):         " << UINT64_C(64) << std::endl;
    std::cout << std::endl;

    //展开成拥有其实参所指定的值且类型为 intmax_t 的整数常量表达式
    std::cout << "INTMAX_C(32):         " << INTMAX_C(32) << std::endl;
    //展开成拥有其实参所指定的值且类型为 uintmax_t 的整数常量表达式
    std::cout << "UINTMAX_C(64):        " << UINTMAX_C(64) << std::endl;
    std::cout << std::endl;
    return 0;
}

输出

格式化宏常量

定义于头文件 <cinttypes>

std::fprintf 系列函数的格式化宏常量


unsigned int
的等价者
描述数据类型的宏



 

std::intx_t




 

std::int_leastx_t

std::int_fastx_t

std::intmax_t

std::intptr_t

x = 8 、 16 、 32 或 64
d有符号十进制整数值的输入PRIdxPRIdLEASTxPRIdFASTxPRIdMAXPRIdPTR
iPRIixPRIiLEASTxPRIiFASTxPRIiMAXPRIiPTR
u无符号十进制整数值的输入PRIuxPRIuLEASTxPRIuFASTxPRIuMAXPRIuPTR
o无符号八进制整数值的输入PRIoxPRIoLEASTxPRIoFASTxPRIoMAXPRIoPTR
x无符号小写十六进制整数值的输入PRIxxPRIxLEASTxPRIxFASTxPRIxMAXPRIxPTR
X无符号大写十六进制整数值的输入PRIXxPRIXLEASTxPRIXFASTxPRIXMAXPRIXPTR

std::fscanf 系列函数的格式化宏常量 


unsigned int
的等价者
描述数据类型的宏



 

std::intx_t




 

std::int_leastx_t

std::int_fastx_t

std::intmax_t

std::intptr_t

x = 8 、 16 、 32 或 64
d有符号十进制整数值的输入SCNdxSCNdLEASTxSCNdFASTxSCNdMAXSCNdPTR
i有符号整数值的输入SCNixSCNiLEASTxSCNiFASTxSCNiMAXSCNiPTR
u无符号十进制整数值的输入SCNuxSCNuLEASTxSCNuFASTxSCNuMAXSCNuPTR
o无符号八进制整数值的输入SCNoxSCNoLEASTxSCNoFASTxSCNoMAXSCNoPTR
x无符号十六进制整数值的输入SCNxxSCNxLEASTxSCNxFASTxSCNxMAXSCNxPTR

调用示例

#include <cstdio>
#include <cinttypes>

int main()
{
    std::printf("INT8_MIN:          %+" PRId8 "\n", INT8_MIN);
    std::printf("INT16_MIN:         %+" PRId16 "\n", INT16_MIN);
    std::printf("INT32_MIN:         %+" PRId32 "\n", INT32_MIN);
    std::printf("INT64_MIN:         %+" PRId64 "\n", INT64_MIN);
    std::printf("\n");

    std::printf("INT_LEAST8_MIN:    %+" PRIdLEAST8 "\n", INT_LEAST8_MIN);
    std::printf("INT_LEAST16_MIN:   %+" PRIdLEAST16 "\n", INT_LEAST16_MIN);
    std::printf("INT_LEAST32_MIN:   %+" PRIdLEAST32 "\n", INT_LEAST32_MIN);
    std::printf("INT_LEAST64_MIN:   %+" PRIdLEAST64 "\n", INT_LEAST64_MIN);
    std::printf("\n");

    std::printf("INT_FAST8_MIN:     %+" PRIdFAST8 "\n", INT_FAST8_MIN);
    std::printf("INT_FAST16_MIN:    %+" PRIdFAST16 "\n", INT_FAST16_MIN);
    std::printf("INT_FAST32_MIN:    %+" PRIdFAST32 "\n", INT_FAST32_MIN);
    std::printf("INT_FAST64_MIN:    %+" PRIdFAST64 "\n", INT_FAST64_MIN);
    std::printf("\n");

    std::printf("INT8_MIN:          %+" PRIi8 "\n", INT8_MIN);
    std::printf("INT16_MIN:         %+" PRIi16 "\n", INT16_MIN);
    std::printf("INT32_MIN:         %+" PRIi32 "\n", INT32_MIN);
    std::printf("INT64_MIN:         %+" PRIi64 "\n", INT64_MIN);
    std::printf("\n");

    std::printf("INT_LEAST8_MIN:    %+" PRIiLEAST8 "\n", INT_LEAST8_MIN);
    std::printf("INT_LEAST16_MIN:   %+" PRIiLEAST16 "\n", INT_LEAST16_MIN);
    std::printf("INT_LEAST32_MIN:   %+" PRIiLEAST32 "\n", INT_LEAST32_MIN);
    std::printf("INT_LEAST64_MIN:   %+" PRIiLEAST64 "\n", INT_LEAST64_MIN);
    std::printf("\n");

    std::printf("INT_FAST8_MIN:     %+" PRIiFAST8 "\n", INT_FAST8_MIN);
    std::printf("INT_FAST16_MIN:    %+" PRIiFAST16 "\n", INT_FAST16_MIN);
    std::printf("INT_FAST32_MIN:    %+" PRIiFAST32 "\n", INT_FAST32_MIN);
    std::printf("INT_FAST64_MIN:    %+" PRIiFAST64 "\n", INT_FAST64_MIN);
    std::printf("\n");

    std::printf("INT8_MIN:          %" PRIo8 "\n", INT8_MIN);
    std::printf("INT16_MIN:         %" PRIo16 "\n", INT16_MIN);
    std::printf("INT32_MIN:         %" PRIo32 "\n", INT32_MIN);
    std::printf("INT64_MIN:         %" PRIo64 "\n", INT64_MIN);
    std::printf("\n");

    std::printf("INT_LEAST8_MIN:    %" PRIoLEAST8 "\n", INT_LEAST8_MIN);
    std::printf("INT_LEAST16_MIN:   %" PRIoLEAST16 "\n", INT_LEAST16_MIN);
    std::printf("INT_LEAST32_MIN:   %" PRIoLEAST32 "\n", INT_LEAST32_MIN);
    std::printf("INT_LEAST64_MIN:   %" PRIoLEAST64 "\n", INT_LEAST64_MIN);
    std::printf("\n");

    std::printf("INT_FAST8_MIN:     %" PRIoFAST8 "\n", INT_FAST8_MIN);
    std::printf("INT_FAST16_MIN:    %" PRIoFAST16 "\n", INT_FAST16_MIN);
    std::printf("INT_FAST32_MIN:    %" PRIoFAST32 "\n", INT_FAST32_MIN);
    std::printf("INT_FAST64_MIN:    %" PRIoFAST64 "\n", INT_FAST64_MIN);
    std::printf("\n");

    std::printf("UINT8_MAX:         %" PRIu8 "\n", UINT8_MAX);
    std::printf("UINT16_MAX:        %" PRIu16 "\n", UINT16_MAX);
    std::printf("UINT32_MAX:        %" PRIu32 "\n", UINT32_MAX);
    std::printf("UINT64_MAX:        %" PRIu64 "\n", UINT64_MAX);
    std::printf("\n");

    std::printf("UINT_LEAST8_MAX:   %" PRIuLEAST8 "\n", UINT_LEAST8_MAX);
    std::printf("UINT_LEAST16_MAX:  %" PRIuLEAST16 "\n", UINT_LEAST16_MAX);
    std::printf("UINT_LEAST32_MAX:  %" PRIuLEAST32 "\n", UINT_LEAST32_MAX);
    std::printf("UINT_LEAST64_MAX:  %" PRIuLEAST64 "\n", UINT_LEAST64_MAX);
    std::printf("\n");

    std::printf("UINT_FAST8_MAX:    %" PRIuFAST8 "\n", UINT_FAST8_MAX);
    std::printf("UINT_FAST16_MAX:   %" PRIuFAST16 "\n", UINT_FAST16_MAX);
    std::printf("UINT_FAST32_MAX:   %" PRIuFAST32 "\n", UINT_FAST32_MAX);
    std::printf("UINT_FAST64_MAX:   %" PRIuFAST64 "\n", UINT_FAST64_MAX);
    std::printf("\n");

    std::printf("UINT8_MAX:         %" PRIx8 "\n", UINT8_MAX);
    std::printf("UINT16_MAX:        %" PRIx16 "\n", UINT16_MAX);
    std::printf("UINT32_MAX:        %" PRIx32 "\n", UINT32_MAX);
    std::printf("UINT64_MAX:        %" PRIx64 "\n", UINT64_MAX);
    std::printf("\n");

    std::printf("UINT_LEAST8_MAX:   %" PRIxLEAST8 "\n", UINT_LEAST8_MAX);
    std::printf("UINT_LEAST16_MAX:  %" PRIxLEAST16 "\n", UINT_LEAST16_MAX);
    std::printf("UINT_LEAST32_MAX:  %" PRIxLEAST32 "\n", UINT_LEAST32_MAX);
    std::printf("UINT_LEAST64_MAX:  %" PRIxLEAST64 "\n", UINT_LEAST64_MAX);
    std::printf("\n");

    std::printf("UINT_FAST8_MAX:    %" PRIxFAST8 "\n", UINT_FAST8_MAX);
    std::printf("UINT_FAST16_MAX:   %" PRIxFAST16 "\n", UINT_FAST16_MAX);
    std::printf("UINT_FAST32_MAX:   %" PRIxFAST32 "\n", UINT_FAST32_MAX);
    std::printf("UINT_FAST64_MAX:   %" PRIxFAST64 "\n", UINT_FAST64_MAX);
    std::printf("\n");
    return 0;
}

输出

INT8_MIN:          -128
INT16_MIN:         -32768
INT32_MIN:         -2147483648
INT64_MIN:         -9223372036854775808

INT_LEAST8_MIN:    -128
INT_LEAST16_MIN:   -32768
INT_LEAST32_MIN:   -2147483648
INT_LEAST64_MIN:   -9223372036854775808

INT_FAST8_MIN:     -128
INT_FAST16_MIN:    -32768
INT_FAST32_MIN:    -2147483648
INT_FAST64_MIN:    -9223372036854775808

INT8_MIN:          -128
INT16_MIN:         -32768
INT32_MIN:         -2147483648
INT64_MIN:         -9223372036854775808

INT_LEAST8_MIN:    -128
INT_LEAST16_MIN:   -32768
INT_LEAST32_MIN:   -2147483648
INT_LEAST64_MIN:   -9223372036854775808

INT_FAST8_MIN:     -128
INT_FAST16_MIN:    -32768
INT_FAST32_MIN:    -2147483648
INT_FAST64_MIN:    -9223372036854775808

INT8_MIN:          37777777600
INT16_MIN:         37777700000
INT32_MIN:         20000000000
INT64_MIN:         1000000000000000000000

INT_LEAST8_MIN:    37777777600
INT_LEAST16_MIN:   37777700000
INT_LEAST32_MIN:   20000000000
INT_LEAST64_MIN:   1000000000000000000000

INT_FAST8_MIN:     37777777600
INT_FAST16_MIN:    37777700000
INT_FAST32_MIN:    20000000000
INT_FAST64_MIN:    1000000000000000000000

UINT8_MAX:         255
UINT16_MAX:        65535
UINT32_MAX:        4294967295
UINT64_MAX:        18446744073709551615

UINT_LEAST8_MAX:   255
UINT_LEAST16_MAX:  65535
UINT_LEAST32_MAX:  4294967295
UINT_LEAST64_MAX:  18446744073709551615

UINT_FAST8_MAX:    255
UINT_FAST16_MAX:   65535
UINT_FAST32_MAX:   4294967295
UINT_FAST64_MAX:   18446744073709551615

UINT8_MAX:         ff
UINT16_MAX:        ffff
UINT32_MAX:        ffffffff
UINT64_MAX:        ffffffffffffffff

UINT_LEAST8_MAX:   ff
UINT_LEAST16_MAX:  ffff
UINT_LEAST32_MAX:  ffffffff
UINT_LEAST64_MAX:  ffffffffffffffff

UINT_FAST8_MAX:    ff
UINT_FAST16_MAX:   ffff
UINT_FAST32_MAX:   ffffffff
UINT_FAST64_MAX:   ffffffffffffffff

注意

因为 C++ 转译立即后随字符串字面量的字符为用户定义字面量,诸如 printf("%"PRId64"\n",n); 的 C 代码在 C++ 中非法,并在 PRId64 前要求空格。

C99 标准建议 C++ 实现不应定义上述极限、常量或格式化宏,除非在包含相对的 C 头文件( stdint.hinttypes.h )前(分别)定义宏 __STDC_LIMIT_MACROS__STDC_CONSTANT_MACROS__STDC_FORMAT_MACROS 。此建议未被采纳,并在 C11 中被移除。然而,某些实现(例如 glibc 2.17 )尝试应用此规则,而可能需要定义 __STDC 宏; C++ 编译器可以通过在某些环境自动定义它们来做变通。

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

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

相关文章

pytorch算力与有效性分析

pytorch Windows中安装深度学习环境参考文档机器环境说明3080机器 Windows11qt_env 满足遥感CS软件分割、目标检测、变化检测的需要gtrs 主要是为了满足遥感监测管理平台&#xff08;BS&#xff09;系统使用的&#xff0c;无深度学习环境内容swin_env 与 qt_env 基本一致od 用于…

力扣第100题 相同的数 c++ 二叉 简单易懂+注释

题目 100. 相同的树 简单 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出…

代码随想录算法训练营第五十九天 | 动态规划 part 17 | 647. 回文子串、516.最长回文子序列

目录 647. 回文子串思路思路2 双指针代码 516.最长回文子序列思路代码 647. 回文子串 Leetcode 思路 dp[i][j]&#xff1a;表示区间范围[i,j] &#xff08;注意是左闭右闭&#xff09;的子串是否是回文子串&#xff0c;如果是dp[i][j]为true&#xff0c;否则为false。递推公式…

python和go相互调用的两种方法

前言 Python 和 Go 语言是两种不同的编程语言&#xff0c;它们分别有自己的优势和适用场景。在一些项目中&#xff0c;由于团队内已有的技术栈或者某一部分业务的需求&#xff0c;可能需要 Python 和 Go 相互调用,以此来提升效率和性能。 性能优势 Go 通常比 Python 更高效&…

什么是DOM(Document Object Model)?如何使用JavaScript操作DOM元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是DOM&#xff1f;⭐ 如何使用JavaScript操作DOM元素&#xff1f;1. 获取DOM元素2. 修改元素内容3. 修改元素属性4. 添加和移除元素5. 添加和移除事件监听器 ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界…

【开发篇】十七、消息:模拟订单短信通知

文章目录 1、消息2、JMS3、AMQP4、案例&#xff1a;模拟订单短信通知 相关文章&#xff1a; 【同步通讯与异步通讯】 1、消息 消息的发送方&#xff0c;即生产者。消息的接收方&#xff0c;即消费者。同步通信就行打视频&#xff0c;等着对方接电话才能继续往下&#xff0c;而…

JDBC 【SQL注入】

一、SQL注入&#x1f353; (一)、SQL注入问题&#x1f95d; 1.向jdbc_user表中 插入两条数据 # 插入2条数据 INSERT INTO jdbc_user VALUES(NULL,jack,123456,2020/2/24); INSERT INTO jdbc_user VALUES(NULL,tom,123456,2020/2/24);2.SQL注入演示 # SQL注入演示 -- 填写…

泊车功能专题介绍 ———— AVP系统基础数据交互内容

文章目录 系统架构系统功能描述云端子系统车辆子系统场端子系统用户APP 工作流程基础数据交互内容AVP 系统基础数据交互服务车/用户 - 云基础数据交互内容车位查询工作流程技术要求数据交互要求 车位预约工作流程技术要求数据交互要求 取消预约工作流程技术要求数据交互要求 泊…

利用C++开发一个迷你的英文单词录入和测试小程序-升级版本

我们现在有了一个本地sqlite3的迷你英文单词小测试工具&#xff0c;需求就跟工作当中一样是不断变更的。这里虚构两个场景&#xff0c;并且一步一步的完成最终升级后的小demo。 场景&#xff1a;数据不依赖本地sqlite3&#xff0c;需要支持远程访问&#xff0c;用目前的restfu…

深入探究C++编程中的资源泄漏问题

目录 1、GDI对象泄漏 1.1、何为GDI资源泄漏&#xff1f; 1.2、使用GDIView工具排查GDI对象泄漏 1.3、有时可能需要结合其他方法去排查 1.4、如何保证没有GDI对象泄漏&#xff1f; 2、进程句柄泄漏 2.1、何为进程句柄泄漏&#xff1f; 2.2、创建线程时的线程句柄泄漏 …

Dijkstra 邻接表表示算法 | 贪心算法实现--附C++/JAVA实现源码

以下是详细步骤。 创建大小为 V 的最小堆,其中 V 是给定图中的顶点数。最小堆的每个节点包含顶点编号和顶点的距离值。 以源顶点为根初始化最小堆(分配给源顶点的距离值为0)。分配给所有其他顶点的距离值为 INF(无限)。 当最小堆不为空时,执行以下操作: 从最小堆中提取…

JVM技术文档--JVM诊断调优工具Arthas--阿里巴巴开源工具--一文搞懂Arthas--快速上手--国庆开卷!!

​ Arthas首页 简介 | arthas Arthas官网文档 Arthas首页、文档和下载 - 开源 Java 诊断工具 - OSCHINA - 中文开源技术交流社区 阿丹&#xff1a; 之前聊过了一些关于JMV中的分区等等&#xff0c;但是有同学还是在后台问我&#xff0c;还有私信问我&#xff0c;学了这些…

人工智能驱动的古彝文识别:保护和传承古彝文文化

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

从零开始 Spring Cloud 13:分布式事务

从零开始 Spring Cloud 13&#xff1a;分布式事务 1.分布式事务问题 用一个示例项目演示在分布式系统中使用事务会产生的问题。 示例项目的 SQL&#xff1a;seata_demo.sql 示例项目代码&#xff1a;seata-demo.zip 这个示例项目中的微服务的互相调用依赖于 Nacos&#xf…

低代码平台如何借助Nginx实现网关服务

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 在典型的系统部署架构中&#xff0c;应用服务器是一种软件或硬件系统&#xff0c…

解决Ubuntu18.04安装好搜狗输入法后无法打出中文的问题

首先下载安装 搜狗拼音输入法 &#xff0c;下载选择&#xff1a; x86_64 在ubuntu中设置 fcitx 最后发现安装好了&#xff0c;图标有了 &#xff0c;但是使用时不能输入中文&#xff0c;使用下面的命令解决&#xff1a; sudo apt install libqt5qml5 libqt5quick5 libqt5qu…

PyTorch深度学习实战(20)——从零开始实现R-CNN目标检测

PyTorch深度学习实战&#xff08;20&#xff09;——从零开始实现R-CNN目标检测 0. 前言1. R-CNN 目标检测模型1.1 核心思想1.2 算法流程 2. 实现 R-CNN 目标检测2.1 数据集准备2.2 获取区域提议和偏移量2.3 创建训练数据2.4 构建 R-CNN 架构 3. R-CNN目标检测模型测试小结系列…

【JUC系列-09】深入理解ReentrantReadWriteLock的底层实现

JUC系列整体栏目 内容链接地址【一】深入理解JMM内存模型的底层实现原理https://zhenghuisheng.blog.csdn.net/article/details/132400429【二】深入理解CAS底层原理和基本使用https://blog.csdn.net/zhenghuishengq/article/details/132478786【三】熟练掌握Atomic原子系列基本…

浅谈智能安全配电装置在老年人建筑中的应用

摘要&#xff1a;我国每年因触电伤亡人数非常多&#xff0c;大多数事故是发生在用电设备和配电装置。在电气事故中&#xff0c;无法预料和不可抗拒的事故是比较少的&#xff0c;大量用电事故可采取切实可行措施来预防。本文通过结合老年人建筑的特点和智能安全配电装置的功能&a…

教你三步搞定VsCode调试C++

目录 1 配置编译任务2 配置调试任务3 进行调试 1 配置编译任务 使用VsCode进行C开发时&#xff0c;除了在机器上安装必要的编译工具&#xff08;例如&#xff0c;gcc、g、cmake等&#xff09;之外&#xff0c;还需要在VsCode配置编译任务&#xff0c;从而可以通过点击或者快捷…