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的大小在不同平台和编译器上可能会有所不同。

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

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

相关文章

编译 CanMV 固件

前言 上一章节中已经搭建好了基于 CanMV 的 C 开发环境&#xff0c;这么一来便可以进行基于 C 语言和 FreeRTOS 的应用开发或者编译基于 MicroPython 语法的应用开发方式所需的 CanMV 固件&#xff0c;本 章就将带领读者体验一下 CanMV 固件的编译流程。 本章分为如下几个小节&…

为什么print语句被Python3遗弃?

在开发和维护python项目的时候发现经常有print语句报错&#xff0c;原因是python3放弃了print语句 print 语句 早就被列在了不可靠的语言特性列表中&#xff0c;例如 Guido 的“Python 之悔”&#xff08;Python Regrets&#xff09;演讲【1】&#xff0c;并计划在 Python 300…

Python期末复习:基础+数据结构

合法的标识符定义规则 以字母或下划线开头&#xff1a; 标识符必须以字母&#xff08;大写或小写&#xff09;或下划线 _ 开头。 后续字符可以是字母、数字或下划线&#xff1a; 后续字符可以是字母&#xff08;大写或小写&#xff09;、数字&#xff08;0-9&#xff09…

Unity 从0开始编写一个技能编辑器_02_Buff系统的Handler

BuffHandler可以是用于处理角色身上buff的Mono类&#xff0c;任何具备跟Buff交互的角色&#xff0c;都要携带这个BuffHandler脚本。如果你的Buff有额外的处理机制&#xff0c;比如互斥Buff&#xff08;如&#xff1a;免疫负面效果的霸体&#xff09;&#xff0c;需要在AddBuff方…

Anthropic AI模型Claude 3.5 Sonnet在Amazon Bedrock上正式可用

Claude 3.5 Sonnet是Anthropic最先进的Claude系列AI模型的新成员&#xff0c;比Claude 3 Opus更智能且价格只有其五分之一 北京——2024年6月21日 亚马逊云科技宣布&#xff0c;Anthropic最新、最强大的模型Claude 3.5 Sonnet现已在Amazon Bedrock上正式可用&#xff0c;该模型…

增强-MIGO物料消耗需要将物料描述写到会计凭证的摘要里面

财务比较闲提的需求&#xff0c;有些物料消耗需要将物料描述写到会计凭证的摘要里面&#xff0c; 找了一下增强点&#xff0c;随便搞了一下&#xff0c;可以了。

20240622 每日AI必读资讯

&#x1f916;力压GPT-4o&#xff01;新王Claude 3.5 Sonnet来了&#xff0c;直接免费可用 - 新模型在推理、知识和编码能力评估方面超越了以前的版本和竞争对手GPT 4o模型&#xff0c;同时其运行速度是Claude 3 Opus的两倍。 - 该模型可在http://Claude.ai和Claude iOS应用上…

Spring Bean 生命周期详解

Spring Bean 生命周期详解 在 Spring 框架中&#xff0c;Bean 的生命周期由 Spring 容器全权管理。了解和掌握 Bean 的生命周期对于使用 Spring 开发稳定且高效的应用程序至关重要。本文将详细介绍 Spring Bean 生命周期的五个主要阶段&#xff1a;实例化、属性注入、初始化、…

如何用vscode编写一个GO语言的入门代码

本章教程,主要介绍如何在VSCODE中,运行GO语言的入门代码。 一、准备一个GO语言代码 一个很简单的代码,用GO语言在控制台打印输出:Hello, World! package mainimport "fmt"func main() {fmt.Println("Hello, World!") }二、安装GO语言SDK 下载地址:

云服务与低代码开发的结合:重塑现代软件开发模式

随着数字化转型的深入推进&#xff0c;越来越多的企业开始将业务迁移到云端&#xff0c;以实现更高的灵活性、可靠性和成本效益。云服务已经成为企业数字化战略的重要组成部分。与此同时&#xff0c;低代码开发作为一种新兴的编程模式&#xff0c;也逐渐受到企业的关注。那么&a…

keepalive+nginx高可用架构

keepalivenginx架构 一.配置真实服务器web1和web2 1.关闭防火墙&#xff0c;并在真实服务器下载http服务 [rootlocalhost ~]# systemctl stop firewalld.service [rootlocalhost ~]# setenforce 0 [rootlocalhost ~]# yum install httpd -y 2.分别在web1和web2上制作网页…

【Redis】List的常用命令以及常用场景

Redis List 是一个简单的链表&#xff0c;支持在两端进行插入和删除操作。这种数据结构在许多场景下非常有用&#xff0c;例如任务队列、消息队列等。Redis 提供了一系列针对 List 的操作命令&#xff0c;帮助我们更高效地操作链表。 1. List常用命令 操作类型命令时间复杂度…

Ubuntu系统使用快速入门实践(八)—— git 命令使用

Ubuntu系统使用快速入门实践系列文章 下面是Ubuntu系统使用系列文章的总链接&#xff0c;本人发表这个系列的文章链接均收录于此 Ubuntu系统使用快速入门实践系列文章总链接 下面是专栏地址&#xff1a; Ubuntu系统使用快速入门实践系列文章专栏 文章目录 Ubuntu系统使用快速…

高温工况下雷达物位计连续冷却方法

高温工况下雷达物位计连续冷却方法 1、提出前状况: 雷达物位计是一种新型物位测量仪表,它采用与介质非接触的测量方式,具有准确度高(分辨率可达1mm)、测量范围大、无可动部件,适用于粘度大的介质、有毒或无毒卫生型介质,有腐蚀性、磨蚀性介质的物位测量,它是通过天线…

【Qt6.3 基础教程 13】 掌握数据展示:使用QTableView和QStandardItemModel

文章目录 前言QTableView&#xff1a;表格式数据的强力工具主要特性 QStandardItemModel&#xff1a;灵活的数据模型主要特性 结合使用QTableView和QStandardItemModel步骤一&#xff1a;初始化模型步骤二&#xff1a;填充数据步骤三&#xff1a;创建视图并设置模型 结论 前言 …

JupyterLab使用指南(八):更改JupterLab左侧默认打开目录

在JupyterLab中&#xff0c;默认打开路径通常是由其配置文件中的root_dir设置决定的。如果你没有特意设置这个配置项&#xff0c;JupyterLab可能会使用当前用户的主目录或者上一次关闭时的路径作为默认打开路径。 更改JupyterLab默认路径的操作在不同操作系统下大体相似&…

Autoencoder(AE)、Variational Autoencoder(VAE)和Diffusion Models(DM)了解

Autoencoder (AE) 工作原理&#xff1a; Autoencoder就像一个数据压缩机器。它由两部分组成&#xff1a; 编码器&#xff1a;将输入数据压缩成一个小小的代码。解码器&#xff1a;将这个小代码还原成尽可能接近原始输入的数据。 优点和应用&#xff1a; 简单易懂&#xff1…

windows使用curl命令出现乱码的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

海口注册公司代理记账的服务优势与流程解析

在海口注册公司加入代理记账服务有多种优势。代理记账公司提供专业的财务服务&#xff0c;帮助企业节约成本、提高效率&#xff0c;实现财务管理的合规性。以下是代理记账服务的主要优势和流程解析&#xff1a; https://www.9733.cn/news/detail/173.html 一、代理记账服务的…

分布式光纤测温DTS在工程现场中稳定性与可靠性如何?

20年前&#xff0c;分布式光纤测温(Distributed Temperature Sensing&#xff0c;DTS)技术的发展尚不成熟&#xff0c;设备成本高昂&#xff0c;其稳定性与可靠性也存在一定问题。然而&#xff0c;经过二十多年的不断发展与创新&#xff0c;DTS技术在工程现场应用中取得了显著进…