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/

相关推荐
楼田莉子35 分钟前
C++算法专题学习:栈相关的算法
开发语言·c++·算法·leetcode
晨非辰40 分钟前
#C语言——刷题攻略:牛客编程入门训练(九):攻克 分支控制(三)、循环控制(一),轻松拿捏!
c语言·开发语言·经验分享·学习方法·visual studio
dragoooon3442 分钟前
[数据结构——lesson3.单链表]
数据结构·c++·leetcode·学习方法
Suresoft China1 小时前
软件测试|STATIC 代码静态验证工具 C/C++ 工具链设置指南
c++·单元测试·静态测试·测试覆盖率·static·代码覆盖率·工具链设置
陈序猿(代码自用版)1 小时前
【考研C语言编程题】数组元素批量插入实现(含图示+三部曲拆解)
c语言·开发语言·考研
77qqqiqi1 小时前
学习循环语句
c语言
kyle~1 小时前
排序---冒泡排序(Bubble Sort)
c语言·c++·算法
l1t1 小时前
我改写的二分法XML转CSV文件程序速度追上了张泽鹏先生的
xml·c语言·人工智能·算法·expat
hmcjn(小何同学)1 小时前
轻松Linux-9.进程间通信
linux·运维·服务器·c++·bash
落羽的落羽2 小时前
【C++】C++11的包装器:function与bind简介
c++·学习