当前位置: 首页 > news >正文

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

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

数据类型字节数范围
char1-128 ~ 127
unsigned char10 ~ 255
short2-32,768 ~ 32,767
unsigned short20 ~ 65,535
int4-2,147,483,648 ~ 2,147,483,647
unsigned int00 ~ 4,294,967,295
long4-2,147,483,648 ~ 2,147,483,647
unsigned long40 ~ 4,294,967,295
long long8-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
unsigned long long80 ~ 18,446,744,073,709,551,615

二、int*_t数据类型

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

数据类型字节数范围
int8_t1-128 ~ 127
uint8_t10 ~ 255
int32_t4-2,147,483,648 ~ 2,147,483,647
uint32_t40 ~ 4,294,967,295
int64_t8-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
uint64_t80 ~ 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/

http://www.lryc.cn/news/266799.html

相关文章:

  • 如何理解JDK、JRE、JVM区别与联系
  • 用友GRP-U8 SmartUpload01 文件上传漏洞
  • react 路由v6
  • rpc【通义】rpc原理【gpt】
  • Leetcode 2973. Find Number of Coins to Place in Tree Nodes
  • 如何调动销售人员使用CRM的积极性?
  • 数值分析期末复习
  • k8s的探针
  • Python 爬虫之下载视频(五)
  • Gradle下载地址
  • 顺序表的实现(头插、尾插、头删、尾删、查找、删除、插入)
  • VMware虚拟机安装Ubuntu系统教程
  • 41 sysfs 文件系统
  • C++面试宝典第9题:找出第K大元素
  • “马屁精”李白
  • python之glob的用法
  • 【adb】电脑通过ADB向手机传输文件
  • npm的常用使用技巧
  • 【网络奇遇记】揭秘计算机网络的性能指标:速率|带宽|吞吐量|时延
  • ACM中算法时间约束
  • C++11的列表初始化和右值引用
  • 千帆起航:探索百度智能云千帆AppBuilder在AI原生应用开发中的革新之路
  • RevIT™ AAV Enhancer, 提高AAV产量的又一利器!
  • Kubectl 部署有状态应用(下)
  • Jmeter 性能 —— 监控服务器!
  • 离散型制造企业为什么要注重MES管理系统的实施
  • Linux系统中跟TCP相关的内核参数
  • 代理模式(Proxy)
  • 在MacOS上Qt配置OpenCV并进行测试
  • java数据结构与算法刷题-----LeetCode167:两数之和 II - 输入有序数组