C/C++不同整数类型的区别

在C/C++中涉及的整数相关的类型大致有如下几种:

  • char、unsigned char
  • short、unsigned short
  • int、unsigned int
  • long、unsigned long
  • long long、unsigned long long
  • int8_t、uint8_t
  • int32_t、uint32_t
  • int64_t、uint64_t
  • DWORD
  • DWORD32、DWORD64
  • size_t、ssize_t
  • SIZE_T、SSIZE_T

一、原生数据类型

以下数据类型C/C++语言中的原生整数类型,其长度取决于所使用的计算机系统和编译器:

  • short、unsigned short
  • int、unsigned int
  • long、unsigned long
  • long long、unsigned long long

如果需要开发跨平台的、具有良好可移植性的程序,请不要使用这些数据类型。通常情况下,这些数据类型所占字节数如下表所示:

数据类型 字节数 范围
char 1 -128 ~ 127
unsigned char 1 0 ~ 255
short 2 -32,768 ~ 32,767
unsigned short 2 0 ~ 65,535
int 4 -2,147,483,648 ~ 2,147,483,647
unsigned int 0 0 ~ 4,294,967,295
long 4 -2,147,483,648 ~ 2,147,483,647
unsigned long 4 0 ~ 4,294,967,295
long long 8 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
unsigned long long 8 0 ~ 18,446,744,073,709,551,615

二、int*_t数据类型

int*_t格式的数据类型是使用typedef重新定义的数据类型。通过在不同的编译环境进行重定义,确保其所占用的字节数始终相同(即数据范围也相同)。

数据类型 字节数 范围
int8_t 1 -128 ~ 127
uint8_t 1 0 ~ 255
int32_t 4 -2,147,483,648 ~ 2,147,483,647
uint32_t 4 0 ~ 4,294,967,295
int64_t 8 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
uint64_t 8 0 ~ 18,446,744,073,709,551,615

三、size_t和std::size_t

size_t和std::size_t是不同的数据类型,size_t是定义在C语言的头文件,而std::size_t定义在C++标准库的<cstddef>头文件中。

虽然二者是不同的数据类型,但std::size_t在实现上兼容size_t了,二者所占的字节数始终相同。

size_t和std::size_t都是无符号整型,它们在32位编译环境占用4字节,64位编译环境占8字节。

如果需要使用有符号的size_t类型,在Linux上可以使用ssize_t类型,Windows上可以使用SSIZE_T类型。

四、DWORD和DWORD32、DWORD64

DWORD是32位无符号整型(范围0 ~ 4,294,967,295

DWORD32是32位无符号整型(范围0 ~ 4,294,967,295),DWORD64是64位无符号整型(范围0 ~ 18,446,744,073,709,551,615)。

DWORD也是32位无符号整型(范围0 ~ 4,294,967,295),可能微软在设计之初是打算让DWORD在不同的编译环境具有不同的位数,但从目前情况来看,这种希望已然破灭,DWORD将永远是32位的无符号整型。

五、一点点建议

为了保证程序的可移植性,请在开发中只使用固定字节数的数据类型,如int8_t、int32_t、int64_t。

更多的文章参考:https://jiangxueqiao.com/

相关推荐
卷卷的小趴菜学编程1 分钟前
项目篇----仿tcmalloc的内存池设计(page cache)
c++·缓存·单例模式·tcmalloc·内存池·span cache
m0_706653234 分钟前
C++中的解释器模式
开发语言·c++·算法
王老师青少年编程7 分钟前
2022信奥赛C++提高组csp-s复赛真题及题解:数据传输
c++·数据传输·真题·csp·信奥赛·csp-s·提高组
Cx330❀7 分钟前
深入理解 Linux 基础 IO:从 C 库到系统调用的完整剖析
linux·运维·服务器·c语言·数据库·人工智能·科技
西电研梦8 分钟前
26西电考研 | 寒假开始,机试 or C语言程序设计怎么准备?
c语言·考研·华为od·研究生·西安电子科技大学·计算机408
hetao17338378 分钟前
2026-01-29~02-03 hetao1733837 的刷题记录
c++·笔记·算法
CC.GG8 分钟前
【Linux】基础I/O----C语言文件操作与系统调用文件操作
linux·c语言·网络
学嵌入式的小杨同学13 分钟前
【嵌入式 GUI 实战】LVGL+MP3 播放器:从环境搭建到图形界面开发全指南
linux·c语言·开发语言·vscode·vim·音频·ux
晚风吹长发16 分钟前
初步了解Linux中的POSIX信号量及环形队列的CP模型
linux·运维·服务器·数据结构·c++·算法
1+α18 分钟前
汽车里的“神经网络”——CAN总线科普
c语言·stm32·嵌入式硬件·信息与通信