C语言入门系列:可迁移的数据类型

文章目录

    • 1,精确宽度类型(exact-width integer type)
    • 2,最小宽度类型(minimum width type)
    • 3,最快的最小宽度类型(fast minimum width type)
    • 4,可以保存指针的整数类型。
    • 5, 最大宽度整数类型,用于存放最大的整数。
    • 6,注意事项
    • 7,小结

C 语言的整数类型(short、int、long)是非常灵活的,C语言标准并没有规定整形的长度,在不同计算机上,占用的字节宽度可能是不一样的,例如,int在某些系统上可能是32位,在其他系统上可能是16位。

程序从一台计算机迁移到另一台计算机时,这种灵活性可能导致一迁移失败,比如从32位int计算机迁移到16位int计算机,在新的计算机上,程序可能出现溢出,进而导致异常。

为了解决这个问题,引入了一些可移植的类型定义,这些类型主要定义在stdint.h和inttypes.h这两个头文件中,它们是C99标准引入的。
在这里插入图片描述

1,精确宽度类型(exact-width integer type)

这个类型保证某个整数类型的宽度是确定的。

int8_t:8位有符号整数。
int16_t:16位有符号整数。
int32_t:32位有符号整数。
int64_t:64位有符号整数。
uint8_t:8位无符号整数。
uint16_t:16位无符号整数。
uint32_t:32位无符号整数。
uint64_t:64位无符号整数。

注意,上面这些本质上都是类型别名,C语言标准库并没有对应的真正的数据类型,实际上编译器会将它们指向的标准库的类型。

比如,某个系统中:

  • 如果int类型为32位,int32_t就会指向int。
  • 如果long类型为32位,int32_t则会指向long。

下面是一个使用示例。

#include <stdio.h>
#include <stdint.h>

int main(void) {
  int32_t x32 = 45933945;
  printf("x32 = %d\n", x32);
  return 0;
}

上面示例中,变量x32声明为int32_t类型,可以保证是32位的宽度。

2,最小宽度类型(minimum width type)

顾名思义,使用这种类型可以保证数据在内存中占用的最小字节宽度。

int_least8_t
int_least16_t
int_least32_t
int_least64_t
uint_least8_t
uint_least16_t
uint_least32_t
uint_least64_t

上面这些类型,可以保证占据的字节不少于指定宽度。

比如,int_least8_t表示可以容纳8位有符号整数的最小宽度的类型。

3,最快的最小宽度类型(fast minimum width type)

可以使整数计算达到最快的类型。

int_fast8_t
int_fast16_t
int_fast32_t
int_fast64_t
uint_fast8_t
uint_fast16_t
uint_fast32_t
uint_fast64_t

上面这些类型是保证字节宽度的同时,追求最快的运算速度,比如int_fast8_t表示对于8位有符号整数,运算速度最快的类型。

这是因为某些机器对于特定宽度的数据,运算速度最快,举例来说,32位计算机对于32位数据的运算速度,会快于16位数据。

4,可以保存指针的整数类型。

intptr_t:可以存储指针(内存地址)的有符号整数类型。
uintptr_t:可以存储指针的无符号整数类型。

5, 最大宽度整数类型,用于存放最大的整数。

intmax_t:可以存储任何有效的有符号整数的类型。
uintmax_t:可以存放任何有效的无符号整数的类型。

上面的这两个类型的宽度比long long和unsigned long更大。

6,注意事项

使用了上述类型后,标准输出时可能出现异常。

inttypes.h还定义了与这些类型相对应的格式化宏,如PRId32用于打印int32_t类型的变量,确保打印函数的正确使用。在进行输入输出操作时,使用对应类型的格式化宏,避免类型不匹配导致的问题。

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main() {
    // 定义一个32位有符号整数
    int32_t myInt = 123456789;
    
    // 使用对应的格式化宏进行输出
    printf("My 32-bit integer: %" PRId32 "\n", myInt);
    
    // 定义一个无符号的16位整数
    uint16_t myUnsignedShort = 65535;
    
    // 输出无符号16位整数
    printf("My 16-bit unsigned integer: %" PRIu16 "\n", myUnsignedShort);
    
    return 0;
}

在这个示例中,我们定义了两个可移植类型的变量:一个32位有符号整数myInt和一个16位无符号整数myUnsignedShort。

使用PRId32和PRIu16宏来确保在打印这些变量时使用的格式是正确的,无论程序在何种平台上运行。

这样编写代码能最大程度地确保数据处理的一致性和程序的可移植性。

7,小结

使用这些类型时,可以确保程序中的变量在不同平台上具有一致的大小和行为,从而提高了程序的可移植性。

例如,如果你需要一个确切的32位整数,你应该使用int32_t而不是依赖于int,因为int的大小在不同平台和编译器上可能会有所不同。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于深度学习的图像识别技术与应用是如何?

基于深度学习的图像识别技术与应用在当今社会中扮演着越来越重要的角色。以下是对该技术与应用的详细解析&#xff1a; 一、技术原理 深度学习是一种模拟人脑处理和解析数据的方式的技术和方法论。在图像识别领域&#xff0c;深度学习主要通过深度神经网络&#xff08;如卷积…

计算机网络 交换机的VLAN配置

一、理论知识 1.VLAN的定义 ①VLAN虚拟局域网&#xff0c;是一种通过将局域网内的设备逻辑地而不是物理地划分成一个个网段从而实现虚拟工作组的技术。 ②IEEE于1999年颁布了用以标准化VLAN实现方案的802.1Q协议标准草案。 ③VLAN技术允许网络管理者将一个物理的LAN逻辑地划…

【C++】平衡二叉树(AVL树)的实现

目录 一、AVL树的概念二、AVL树的实现1、AVL树的定义2. 平衡二叉树的插入2.1 按照二叉排序树的方式插入并更新平衡因子2.2 AVL树的旋转2.2.1 新节点插入较高左子树的左侧&#xff08;LL平衡旋转&#xff09;2.2.2 新节点插入较高右子树的右侧&#xff08;RR平衡旋转&#xff09…

python库BeeWare,一个如雷贯耳的可以创建原生应用程序的库

目录 BeeWare 包括以下主要组件和工具&#xff1a; 创建BeeWare虚拟环境 配置BeeWare 创建一个新的BeeWare项目&#xff08; Hello World! &#xff09; 尝试 Hello World 样例 BeeWare 是一个开源项目&#xff0c;旨在帮助开发者使用 Python 创建原生应用程序&#xff0c;…

系统架构师考点--数据库系统

大家好。今天我来总结一下数据库系统的相关考点。本考点一般情况下上午场考试占3-5分&#xff0c;下午场案例分析题也会出现。 一、数据库系统 数据&#xff1a;数据库中存储的基本对象&#xff0c;是描述事物的符号记录。数据的种类:文本、图形、图像、音频、视频、学生的档…

【机器学习】大模型驱动下的医疗诊断应用

摘要&#xff1a; 随着科技的不断发展&#xff0c;机器学习在医疗领域的应用日益广泛。特别是在大模型的驱动下&#xff0c;机器学习为医疗诊断带来了革命性的变化。本文详细探讨了机器学习在医疗诊断中的应用&#xff0c;包括疾病预测、图像识别、基因分析等方面&#xff0c;并…

天擎客户端卸载 自我保护异常

问题&#xff1a;客户端卸载失败提示“检测到自我保护状态异常&#xff0c;停止卸载” 下列操作&#xff0c;均在客户端进行&#xff0c;别改成服务端的了 进入天擎客户端主目录&#xff0c;默认路径为 C:\Program Files (x86)\Qianxin\Tianqing 将avsecbase.dll 重命名为 1…

移动端+PC端应用模式的智慧城管综合执法办案平台源码,案件在线办理、当事人信用管理、文书电子送达、沿街店铺分析

城市管理综合执法管理平台实现执法办案、业务全流程在线办理&#xff0c;依托移动端PC端的“两端”应用模式&#xff0c;保障能够通过信息化手段进行日常的执法办案工作&#xff0c;强化执法监督功能。提供了案件在线办理、当事人信用管理、文书电子送达、沿街店铺分析等功能&a…

【数据结构与算法】树的遍历,森林遍历 详解

树的先根遍历、后根遍历对应其二叉树的哪种遍历 树的先根遍历对应其二叉树的先序遍历&#xff08;根-左-右&#xff09;。树的后根遍历对应其二叉树的中序遍历&#xff08;左-根-右&#xff09;。 森林的先根遍历、中根遍历对应其二叉树的哪种遍历? 森林的先根遍历对应其二…

细说MCU输出两路PWM波形及改变占空比的实现方法

目录 一、硬件及工程 二、建立工程 三、代码修改 四、下载运行 五、改变PWM波形占空比 1、定义两个全局变量 2、启动定时器 3、重写TIM3中断回调函数 六、下载并运行 一、硬件及工程 文章依赖的硬件及工程配置参考本文作者的其他文章&#xff1a;细说ARM MCU的串口接…

代码随想录算法训练营第六十七天 | 字符串接龙、有向图的完全可达性、岛屿的周长

字符串接龙 文字讲解&#xff1a;110. 字符串接龙 | 代码随想录 解题思路 本题只需要求出最短路径的长度就可以了&#xff08;想到广搜&#xff09;&#xff0c;不用找出具体路径。 所以这道题要解决两个问题&#xff1a; 图中的线是如何连在一起的起点和终点的最短路径长…

java之url任意跳转漏洞

1 漏洞介绍 URLRedirect url重定向漏洞也称url任意跳转漏洞&#xff0c;网站信任了用户的输入导致恶意攻击&#xff0c;url重定向主要用来钓鱼&#xff0c;比如url跳转中最常见的跳转在登陆口&#xff0c;支付口&#xff0c;也就是一旦登陆将会跳转任意自己构造的网站&#xf…

【Pandas驯化-11】一文搞懂Pandas中的分组函数groupby与qcut、fillna使用

【Pandas驯化-11】一文搞懂Pandas中的分组函数groupby与qcut、fillna使用 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获…

Linux常用命令(16)—awk命令(有相关截图)

写在前面&#xff1a; 最近在学习Linux命令&#xff0c;记录一下学习Linux常用命令的过程&#xff0c;方便以后复习。仅供参考&#xff0c;若有不当的地方&#xff0c;恳请指正。如果对你有帮助&#xff0c;欢迎点赞&#xff0c;关注&#xff0c;收藏&#xff0c;评论&#xf…

蓝桥杯 经典算法题 合并排序数组

题目&#xff1a; 题解&#xff1a; leetcode上也有这道题一模一样。和归并排序的小过程基本一模一样&#xff0c;只不过因为题目要求只能将arr2中元素合并到arr1中&#xff0c;一种可行的方法是按元素从大到小&#xff0c;顺序从每个序列尾部开始操作&#xff0c;第一填的位置…

杀疯了!PerfXCloud-AI大模型夏日狂欢来袭,向基石用户赠送 ∞ 亿Token!

【澎峰科技重磅消息】 在全球范围内大模型正逐渐成为强大的创新驱动力。在这个充满激情的夏日&#xff0c;PerfXCloud为开发者和企业带来了前所未有的福利&#xff1a; 1. 零成本亲密、深度体验大模型&#xff0c;提供大量示范案例。 2. 向基石用户赠送∞亿Token的激励计划。…

终于找到了免费的云服务器

今天朋友推荐了一个免费的云服务器&#xff1a;“阿贝云” 我最喜欢的是它的"免费虚拟主机"“免费云服务器”&#xff0c;省了我好多钱&#xff0c;我的使用感受是用起来经济实惠省心&#xff0c;不要钱的东西谁不喜欢呢&#xff0c;对于普通开发者来说&#xff0c;…

程序猿大战Python——面向对象——继承基础

定义类的几种语法 目标&#xff1a;了解定义类的标准语法。 我们知道&#xff0c;可以使用class关键字定义类。 在类的使用中&#xff0c;定义方式有三种&#xff1a; &#xff08;1&#xff09;【类名】 &#xff08;2&#xff09;【类名()】 &#xff08;3&#xff09;【…

ubuntu 20.04 访问csdn报错 Secure connection failed 解决

问题原因&#xff1a; 我一边更新源 sudo apt update & apt upgrade一边在看csdn&#xff0c;估计是这个导致的. 所以我直接把华为源换成了阿里源。 sudo apt update & apt upgrade再更新一次&#xff0c;解决。

探索语言模型的智能飞跃:预训练损失与突现能力的新视角

在人工智能的辉煌编年史中&#xff0c;语言模型&#xff08;LMs&#xff09;的崛起标志着自然语言处理领域的一个巨大飞跃。随着技术的进步&#xff0c;这些模型不仅在规模上日益庞大&#xff0c;更在性能上不断刷新着人们的认知边界。它们在问答、翻译、文本摘要等任务上展现出…