uint32_t与int区别与联系

1.背景介绍

在一些程序中经常看到uint8_t uint32_t等数据类型,那么它与我们常见的int类型有什么区别呢。

2.协议介绍

stdint.h头文件是为了代码的可移植性而推出的,C99中就已经规范了。

3.代码可移植性

3.1 数据类型的差异

大部分的32位系统采用的是ILP32(这个对于嵌入式是在ABI文档中规定的ARM的ABI文档),大部分64位系统采用的是LP64。各个系统基本数据类型长度对比如图所示:

TYPEILP32LP64LLP64LP332ILP64
char11111
short22222
int44428
long48448
long long88888
float44444
double88888
size_t48848
pointer48848

3.2 ILP32 与LP64的对比

TypeILP32 sizeofILP32 printLP64 sizeofLP64 print备注
bool1%u1%uC++
char1%d或%c1%d或%c
unsigned char1%u1%u
short2%d2%d
unsigned short2%u2%u
int4%d4%d
unsigned int4%u4%u
long4%ld8%ld有差异
unsigned long4%lu8%lu有差异
long int4%ld8%ld有差异
unsigned long int4%lu8%lu有差异
long long8%lld8%lld
unsigned long long8%llu8%llu
type *4%p8%p有差异
pid_t4%d4%d
socklen_t4%u4%u
off_t4%zd8%zd有差异
time_t4%zd8%zd有差异
pthread_t4%zu8%zu有差异
size_t4%zu8%zu有差异
ssize_t4%zd8%zd有差异

基于可移植性要求,在32位和64位条件下,可变长度的数据类型可能导致兼容性错误

3.3 数据类型统一化

类型定义ILP32LP64PRINT使用场景及代替类型
void---void,无类型,仅用于占位和通用指针定义
char11%c对于字符串、数组直接使用原生char
int8_t11%d对于1字节整型使用int8_t,uint8_t
uint8_t11%u对于1字节整型使用int8_t,uint8_t
int16_t22%d代替short
uint16_t22%u代替unsigned short
int32_t44%d代替int
uint32_t44%u代替unsigned int
int64_t88%PRId64代替long long、宏实现代码兼容
uint64_t88%PRIu64代替unsigned long long、宏实现代码兼容
float44%f单精度浮点数
double88%lf双精度浮点数
bool11%d布尔类型
uintptr_t48%zu会根据32位和64位的不同定义为不同的长度,用于可能存储指针的场景
type *48%ptype *,可变长度类型,与uintptr_t等价,存在类型转换时建议使用uintptr_t
nullptr_t48%p指针初始化
pid_t44%dLinux内置,固定长度
socklen_t44%uLinux内置,固定长度
off_t/time_t48%zd可变长度类型,有符号
size_t/pthread_t48%zu可变长度类型,无符号,仅用于调用库函数的兼容性要求(比如底层API中使用了size_t)

4.代码实践

4.1 代码示例

在线编译环境:https://godbolt.org/ X86-64 gcc 9.4

#include <stdio.h>
#include <stdint.h>
int32_t main()
{  printf("int: %d\n",sizeof(int));printf("long:%d\n",sizeof(long));printf("uint32_t:%d\n",sizeof(uint32_t));printf("uint64_t:%d\n",sizeof(uint64_t));
}
int: 4
long:8
uint32_t:4
uint64_t:8

4.1 stdint.h

以下为从gcc编译链提取的stdint头文件,x86_64 x86_64 GNU/Linux

#ifndef __int8_t_defined
# define __int8_t_defined
typedef signed char             int8_t;
typedef short int               int16_t;
typedef int                     int32_t;
# if __WORDSIZE == 64
typedef long int                int64_t;
# else
__extension__
typedef long long int           int64_t;
# endif
#endif/* Unsigned.  */
typedef unsigned char           uint8_t;
typedef unsigned short int      uint16_t;
#ifndef __uint32_t_defined
typedef unsigned int            uint32_t;
# define __uint32_t_defined
#endif
#if __WORDSIZE == 64
typedef unsigned long int       uint64_t;
#else
__extension__
typedef unsigned long long int  uint64_t;
#endif

可以看见uint8_t也是对int等不同的类型的重定义而已,只是实现了跨平台;

5.参考文献

1.ISO/IEC 9899 :TC3
2.鸿蒙代码移植规范

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

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

相关文章

基于Java+SpringBoot+Mybaties-plus+Vue+elememt+hadoop + redis 医院就诊系统 设计与实现

一.项目介绍 前端&#xff1a;患者注册 、登录、查看首页、医生排班、药品信息、预约挂号、就诊记录、电子病历、处方开药、我的收藏 后端分为&#xff1a; 医生登录&#xff1a;查看当前排班信息、查看患者的挂号情况、设置患者就诊记录、电子病历、给患者开药和个人信息维护 …

公共交通无障碍设施:科技翅膀助力盲人出行新飞跃

在城市的脉络中&#xff0c;公共交通扮演着连接每一个角落的重要角色。然而&#xff0c;对于视力受限的盲人朋友而言&#xff0c;这幅繁忙而复杂的交通网络往往隐藏着诸多不易察觉的障碍。值得庆幸的是&#xff0c;随着公共交通无障碍设施的不断完善&#xff0c;以及高科技辅助…

20240502给NanoPi的NEO core开发板编译移远的4G模块的上网程序quectel-CM

20240502给NanoPi的NEO core开发板编译移远的4G模块的上网程序quectel-CM 2024/5/2 16:29 1、默认编译为AMD64/INTEL的x64架构的可执行文件&#xff1a; rootrootrootroot-ThinkBook-16-G5-IRH:~$ rootrootrootroot-ThinkBook-16-G5-IRH:~$ unzip Quectel_QConnectManager_Lin…

CSS-复合选择器

作用&#xff1a; 后代选择器&#xff1a; 子代选择器 并集选择器 用逗号隔开&#xff0c;在style里面写的时候&#xff0c;每一个标签空一行。 <title>Document</title><style>p,div,span{color: aqua;}</style> </head> <body><p>…

C语言——队列的实现

队列按照先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则管理数据。这意味着最先进入队列的元素会被最先移出&#xff0c;类似于排队等候服务的情况。队列通常有两个主要操作&#xff1a;入队&#xff08;enqueue&#xff09;&#xff0c;将元素添加…

python - 3D图表绘制

Pyecharts 和 3D 图表绘制 Pyecharts 是一个用于生成各种图表的 Python 库&#xff0c;它基于 Echarts&#xff0c;支持大量的图表类型&#xff0c;非常适合用于数据分析和可视化。Pyecharts 主要优点是易于使用&#xff0c;可以直接在 Python 环境中绘制富有交互性的图表&…

ES练习项目-酒店搜索

目录 1 需求分析2 酒店搜索和分页2.1 请求和响应分析2.2 定义实体类&#xff0c;接收请求参数的JSON对象2.3 编写controller&#xff0c;接收页面的请求2.4 编写业务实现&#xff0c;利用RestHighLevelClient实现搜索、分页 3. 酒店结果过滤3.1 请求和响应分析3.2 修改请求参数…

【Python快速上手(十)】

目录 Python快速上手&#xff08;十&#xff09;Python3 作用域和OS 文件/目录方法Python3 作用域1. 内置作用域&#xff08;Built-in Scope&#xff09;2. 全局作用域&#xff08;Global Scope&#xff09;3. 嵌套作用域&#xff08;Enclosing Scope&#xff09;4. 局部作用域…

Django框架之模型层

一、前期准备 1、测试脚本 当你只是想要测试Django中的某一个py文件内容&#xff0c;那么你可以不用书写前后端交互的形式&#xff0c;而是直接写一个测试脚本即可 这内容其实就是最外部 manage.py 文件中的上面几句话 脚本代码无论是写在应用下的 tests.py文件还是自己新建…

结合创新!频域+时间序列,预测误差降低64.7%

频域时间序列不仅能提供更丰富的信息&#xff0c;还能提高模型性能和预测准确性。对于论文er来说&#xff0c;是个可发挥空间大、可挖掘创新点多的研究方向。 具体来说&#xff1a; 通过将复杂的时间序列数据转换成简单的频率成分&#xff0c;我们可以更容易地捕捉到数据的周期…

【人工智能基础】逻辑回归实验分析

实验环境&#xff1a;anaconda、jutpyter Notebook 实验使用的库&#xff1a;numpy、matplotlib 一、逻辑回归 逻辑回归是一个常用于二分类的分类模型。本质是&#xff1a;假设数据服从这个分布&#xff0c;然后使用极大似然估计做参数的估计。 二、实验准备 引入库、预设值…

Sam Altman:那些我希望有人能早点告诉我的事

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

【跟我学RISC-V】(一)认识RISC-V指令集并搭建实验环境

写在前面 现在计算机的体系架构正是发展得如火如荼的时候&#xff0c;占领桌面端市场的x86架构、占领移动端市场的arm架构、在服务器市场仍有一定地位的mips架构、国产自研的指令集loongarch架构、还有我现在要讲到的新型开源开放的RISC-V指令集架构。 我先说一说我的学习经历…

初始计算机网络

TCP/IP TCP/IP模型 TCP/IP网络模型&#xff1a;对于不同设备之间的通信&#xff0c;就需要网络通信&#xff0c;而设备是多样性的&#xff0c;所以要兼容多种多样的设备&#xff0c;就协商出了一套通用的网络协议。 TCP/IP分层 这个网络协议是分层的&#xff0c;每一层都有…

【MATLAB】GUI初步设计

MATLAB界面设计 前言一、基本步骤1.1 创建GUI文件1.2 界面设计 总结 前言 为了完成图像处理的作业&#xff0c;简直就是生活不易啊 找到一个很棒的教学视频 基于MATLAB的GUI界面设计流程讲解 一、基本步骤 1.1 创建GUI文件 由于在写博文之前我已经创建好文件了&#xff0c;…

SpringBoot+vue实现登录功能

目录 1. vue集成axios 1.1.新建request.js 1.2.新建login.js 2. Login.vue登录页面 2.1.导入login.js 2.2.登录逻辑 3. SpringBoot后台代码 3.1.pom.xm导入hutool工具包 3.2.新建UserPasswordDTO类

文件批量高效管理,批量将PDF类型文件移动到指定文件夹里,实现文件高效管理

文件的管理与整理成为了我们生活中不可或缺的一部分。面对堆积如山的PDF文件&#xff0c;你是否也曾感到手足无措、焦头烂额&#xff1f;现在&#xff0c;有了我们的批量文件管理工具&#xff0c;PDF文件的管理将变得前所未有的高效与简单&#xff01; 首先&#xff0c;我们要…

拆单算法交易(Algorithmic Trading)

TWAP TWAP交易时间加权平均价格Time Weighted Average Price 模型&#xff0c;是把一个母单的数量平均地分配到一个交易时段上。该模型将交易时间进行均匀分割&#xff0c;并在每个分割节点上将拆分的订单进行提交。例如&#xff0c;可以将某个交易日的交易时间平均分为N 段&am…

compose调用系统分享功能分享图片文件

compose调用系统分享功能图片文件 简介UI界面提供给外部程序的文件访问权限创建FileProvider设置共享文件夹 通用分享工具虚拟机验证结果参考 本系列用于新人安卓基础入门学习笔记&#xff0c;有任何不同的见解欢迎留言 运行环境 jdk17 andriod 34 compose material3 简介 本案…

JavaEE_操作系统之进程(计算机体系,,指令,进程的概念、组成、特性、PCB)

一、冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09; 现代的计算机, 大多遵守冯诺依曼体系结构 CPU 中央处理器: 进行算术运算和逻辑判断.存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)输入设备: 用户给计算机发号施令的设备.输出设备: 计算机个…