C++中基本数据类型字节数及取值范围

2023-11-19

机器字长:是指计算机进行一次整数运算所能处理的二进制数据的位数(整数运算即定点整数运算)。机器字长也就是运算器进行定点数运算的字长,通常也是CPU内部数据通路的宽度。现在一般为32位即4个字节,也有64位和16位的。

     算术类型的存储空间按照机器而定。一般,short类型为半个机器字长,int为一个机器字长,long为1或2个机器字长,float为一个机器字长,double为两个字,long double用3或4个字长。C++标准规定的是每个算术类型的最小存储空间,但其并不阻止编译器用更大的存储空间。如果要保证移植性,尽量用__int16 __int32 __int64吧,或者自己typedef int INT32一下。

数据类型名称 字节数 别名 取值范围
int * signed,signed int 操作系统决定,即与操作系统的"字长"有关
unsigned int * unsigned 由操作系统决定,即与操作系统的"字长"有关
__int8 1 char,signed char –128 到 127
__int16 2 short,short int,signed short int –32,768 到 32,767
__int32 4 signed,signed int –2,147,483,648 到 2,147,483,647
__int64 8 –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
bool 1 false 或 true
char 1 signed char –128 到 127
unsigned char 1 0 到 255
short 2 short int,signed short int –32,768 到 32,767
unsigned short 2 unsigned short int 0 到 65,535
long 4 long int,signed long int –2,147,483,648 到 2,147,483,647
long long 8 none (but equivalent to __int64) –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long 4 unsigned long int 0 到 4,294,967,295
enum * 由操作系统决定,即与操作系统的"字长"有关
float 4 3.4E +/- 38 (7 digits)
double 8 1.7E +/- 308 (15 digits)
long double 8 1.7E +/- 308 (15 digits)
wchar_t 2 __wchar_t 0 到 65,535

(P:指针的大小为定值4个字节)

32位机器环境下结果如下:

Type

Size

数值范围

无值型void

0 byte

无值域

布尔型bool    

1 byte

true   false

有符号短整型short [int] /signed short [int]

2 byte

-32768~32767

无符号短整型unsigned short [int]  

2 byte

0~65535

有符号整型int /signed [int]

4 byte

-2147483648~2147483647

无符号整型unsigned [int]

4 byte

0~4294967295

有符号长整型long [int]/signed long [int]

4 byte

-2147483648~2147483647

无符号长整型unsigned long [int]

4 byte

0~4294967295

long long

8 byte

0~18446744073709552000

有符号字符型char/signed char

1 byte

-128~127

无符号字符型unsigned char

1 byte

0~255

宽字符型wchar_t (unsigned short.)

2 byte

0~65535

单精度浮点型float 

4 byte

-3.4E-38~3.4E+38

双精度浮点型double

8 byte

1.7E-308~1.7E+308

long double

8 byte

 

说明:

1)类型修饰符signedunsigned用于修饰字符型和整形。

2)类型修饰符shortlong用于修饰字符型和整形。

3)当用signedunsignedshortlong修饰int整形时,int可省略。

4)其中boolwchar_tC++特有的。

5)除上表以外,C/C++都可以自定义枚举enum、联合unionstruct结构体类型。

6)以上sizeof通过Windows XP 32位平台测试,其中某些类型数据的字节数和数值范围由操作系统和编译平台决定。比如16位机上,sizeof(int) = 2,而32位机上sizeof(int) = 432位机上sizeof(long) = 4,而64位机上sizeof(long) = 8。除此之外,注意64位机上的pointer8byte

7)void的字面意思是“无类型”,不能用来定义变量。void真正发挥的作用在于:<1> 对函数返回和函数参数的限定,例如自定义既不带参数也无返回值的函数voidMyFunc(void);<2>定义无类型通用指针void *,指向任何类型的数据。

8)标准C++库及STL还提供了通用数据结构:字符串类string;向量类模板vector;双端队列类模板deque;链表类模板list;容器适配器堆栈类stack(实现先进后出的操作);容器适配器队列类queue(实现先进先出的操作);集合类set;多重集合类multiset;映射类map;多重映射类multimap;位集合bitset;迭代器iterator (类似指针的功能,对容器的内容进行访问)

9在标准c++中,int的定义长度要依靠你的机器的字长,也就是说,如果你的机器是32位的,int的长度为32位,如果你的机器是64位的,那么int的标准长度就是64位,而vc__int64是为在32机位机器长实现64位长度的整形数。

10)关于32位平台下的intlong

long从字面上看,应该是64位才更合理,把long当成32位实在是一个历史的包袱。像C#那样新起炉灶的程序语言,由于没有需要支持老代码的问题,就把long当作64位来处理了。

32位平台下,long是相对short而言,longshort)类型是longshort int类型的简称,sizeof(long)= sizeof(int) = 4intlong的范围虽然一样,但输入输出格式不同,printf int的格式为%d,而printf long的格式为%ld

考虑到程序的可移植性,还是要将他们区分开来。但当要求的数值范围为4byte时,建议使用int类型,因为第一版的C语言只有一种类型,那就是int

11)在Win32APIMFC中为了使类型名称在语意上更明了,对以上基本类型进行了大量的typedef。例如WINDEF.H中的BYTE,WORD,DWORD

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++中基本数据类型字节数及取值范围 的相关文章

  • 有没有办法分析 WCF 应用程序的性能?

    我们正在尝试测量我们的系统的性能 该系统是一个使用 WCF 调用的 NET 3 5 应用程序 问题是到目前为止 我们无法分析这些调用中的方法 编写了一个 winforms 客户端应用程序来测试我们的系统 我们尝试使用ANTS 4 Profi
  • 如何在联系我们页面中使用用户电子邮件发送电子邮件?

    我正在创建一个联系我们页面 并且我想从该页面接收邮件 因为它的邮件来自用户邮件 我写了这段代码 var client new SmtpClient smtp gmail com 587 Credentials new NetworkCred
  • 类型转换 sockaddr 结构

    我正在尝试学习网络编程 并在这个过程中学习C 我对结构感到困惑sockaddr这是一个通用地址 并且sockaddr in 我的书里是这么说的 因此 我们可以填写 sockaddr in 的字段 然后强制转换 a 指向 它指向 指向 soc
  • 实体框架 - 循环更新属性

    我正在尝试找到一种方法来循环 EF 对象的属性并更新这些属性的值 更具体地说 我有 50 个字段 其中最多填充 50 个下拉列表 所有 50 个可能都需要填充 也可能不需要填充 为了解决这个问题 我有一个中继器 最多可以创建 50 个 DD
  • 如何使用Task.WhenAny并实现重试

    我有一个创建多个基于 I O 的任务的解决方案 我正在使用Task WhenAny 来管理这些任务 但通常许多任务会由于网络问题或请求限制等原因而失败 我似乎找不到一个解决方案 使我能够在使用时成功重试失败的任务Task WhenAny 方
  • 用 C++ 解密文件,该文件使用 openssl -aes-128-cbc 加密

    我正在尝试用 C 解密文件 该文件使用以下命令加密 openssl enc nosalt aes 128 cbc pass pass test in test txt out test enc txt p 控制台显示key 098F6BCD
  • 无法更新 .mdf 数据库,因为该数据库是只读的(Windows 应用程序)

    我使用 C 创建了一个数据库 Windows 应用程序 我的应用程序在 Windows XP 上成功运行 但在 Vista 或 Windows 7 系统上无法正确执行 我的应用程序显示类似以下内容的消息 无法更新 mdf 数据库 因为该数据
  • 尝试将元素推入向量

    在头文件 我没有编写 中 已经定义了一个结构体 如下所示 struct MemoryMessage public boost counted base public FastAlloc explicit MemoryMessage Memo
  • c++11 中的 std::thread 问题

    我在尝试从标准模板库编译具有多线程的程序时遇到一些麻烦 当我尝试编译以下程序时 它返回一个晦涩的错误 include
  • 是否可以用 C# 为 Android 编写应用程序?

    我们都知道Android运行Dalvik VM程序 通常开发人员用 Java 编写程序并将其编译为 Dalvik 字节码 我想知道是否有可能创建一个可以接受 C 代码并将其编译为 Dalvik 字节码的编译器 嗯 这是一种选择 或者您可以在
  • 让 WIX 在项目中包含引用

    我对 WiX 和设置自定义安装程序完全陌生 所以我对问题的主题表示歉意 我有一个内部业务应用程序 日记 它构建并运行良好 因此我按照教程 官方文档添加 WiX 项目并引用日记的 csproj 然后构建并运行这个最基本版本的 WiX 安装程序
  • 使用 cryptoapi CryptImportKey 导入公钥时出错

    我想将公钥 blob 导入到 CSP 但发生了错误 BYTE pbData 0xEB 0x2A 0x38 0x56 0x86 0x61 0x88 0x7F 0xA1 0x80 0xBD 0xDB 0x5C 0xAB 0xD5 0xF2 0x
  • 如何使用 Caliburn.Micro MVVM 将焦点设置到控件

    我有一个表单 我想在发生某些用户操作时将焦点设置到文本框 我知道 MVVM 的处理方式是绑定到 VM 属性 但是 TextBox 没有允许这种情况发生的属性 从虚拟机设置焦点的最佳方法是什么 我创建了一个 IResult 实现 可以很好地实
  • 如何使用包含的转换的排名来比较两个标准转换序列

    include
  • 我可以在C中直接比较int和size_t吗?

    我可以比较一个int and a size t像这样的变量 int i 1 size t y 2 if i y Do something 或者我必须输入其中之一 只要满足以下条件 它就是安全的int为零或正数 如果它是负数 并且size t
  • 为什么 OOP 中静态类的最佳实践有所不同?

    我目前正在阅读有关 Java 最佳实践的内容 我发现根据这本书 https rads stackoverflow com amzn click com 0321356683我们必须优先选择静态类而不是非静态类 我记得在 C 最佳实践中 我们
  • 修改公共属性的访问修饰符是否是重大更改?

    如果我将公共属性的 setter 的访问修饰符从私有更改为公共 是否会导致引用它的其他程序集发生任何重大更改 UPDATE 这个问题是我 2012 年 1 月博客的主题 https ericlippert com 2012 01 09 ev
  • 如何从标准输入读取一行,阻塞直到找到换行符?

    我试图从命令行的标准输入一次读取任意长度的一行 我不确定是否能够包含 GNU readline 并且更喜欢使用库函数 我读过的文档表明getline应该可以工作 但在我的实验中它不会阻塞 我的示例程序 include
  • 父窗体中的居中消息框[重复]

    这个问题在这里已经有答案了 有没有一种简单的方法可以在 net 2 0中将MessageBox居中于父窗体中 我在 C 中确实需要这个并发现中心消息框 C http bytes com topic c sharp answers 26712
  • 你将如何开始自动化我的工作? - 第2部分

    后续这个问题 https stackoverflow com questions 2796128 how would you start automating my job 在经历了第一波进货 9 小时的复制 粘贴 后 我现在相信我已经满足

随机推荐

  • HTML innerHTML属性用法及分析

    innerHTML 设置或返回表格行的开始和结束标签之间的 HTML 看它的英文单词也可以明白就是里面的字符按html标记的语言格式取出来或重新设置 innerHTML属性w3c标准不支持的 但是各大浏览器支持它的实现 innerHTML的
  • ModelAndView,Model和httpServletRequest

    一 参数绑定 1 默认支持类型 springmvc中 有支持默认类型的绑定 也就是说 直接在controller方法形参上定义默认类型的对象 就可以使用这些对象 HttpServletRequest对象 HttpServletRespons
  • WWW 2022 弯道超车:基于纯MLP架构的序列推荐模型

    作者 于辉 机构 中国科学院大学地质与地球物理研究所 研究方向 人工智能与固体地球物理学 作者 周昆 机构 中国人民大学信息学院 研究方向 序列表示学习 本文主要提出了一个基于纯MLP架构的序列化推荐模型 其通过可学习滤波器对用户序列进行编
  • 《Linux基础》02. 目录结构 · vi、vim · 关机 · 重启

    目录结构 1 目录结构 2 vi vim快速入门 2 1 vi 和 vim 的三种模式 2 1 1 一般模式 2 1 2 编辑模式 2 1 3 命令模式 2 2 常用快捷键 2 2 1 一般模式 2 2 2 命令模式 2 2 3 键盘图 3
  • 有关AngularJS请求Web API资源的思路

    页面部分大致如下 div div productManagement是页面module的名称 页面内容通过ng include加载productListView html这个页面 注意 ng include属性值是字符串 app produ
  • NUC980开源项目32-显示内核调试信息

    上面是我的微信和QQ群 欢迎新朋友的加入 编写一个简单的驱动代码 hello c include
  • C++ 面向对象三大特征总结(详解)

    1 面向对象的三大特征 1 封装 封装 将一个对象的全部的属性变量和行为方法进行包装 集中到一个类中 并用权限对其成员属性和成员方法加以限制 使得外部对其访问时 不能随意改变该包装 include
  • 5/26 博客 第四章 交换机基本原理与配置

    交换机 数据链路层的设备 数据帧数据链路层的作用 1 物理地址 网络拓扑的建立 维护 拆除 2 把数据封装在帧中 按顺序传送 3 差错恢复 重传 重新再发一次 4 流量控制 确保中间传输设备的稳定以及双发传输速率的匹配 数据链路层主要的工作
  • FPGM(Filter Pruning via Geometric Median)笔记

    原文地址 文章目录 1 创新点 2 解决了哪些问题 3 原理和算法流程 1 创新点 提出了一种新的过滤器剪枝方法 即通过几何中值的过滤器剪枝 FPGM 来压缩模型 与以前的方法不同 FPGM 通过修剪带有冗余信息的过滤器而不是那些重要性 相
  • docker 指定不同容器使用同一个网段

    问题描述 因为我使用了dockers compose 不同的服务在不同的docker compose文件中 所以当远程调用的时候出现了根据容器名访问失败的错误 基于此我准备在docker中创建一个network 然后让其他容器全都指定使用一
  • Faster Transformer

    背景 Transformer自2017年的 Attention is All you Need 提出以来 成为通用高效的特征提取器 虽然其在NLP TTS ASR CV等多个领域表现优异 但在推理部署阶段 其计算性能却存在巨大挑战 以BER
  • PyTorch学习日志_20201030_神经网络

    日期 2020 10 30 主题 PyTorch入门 内容 根据PyTorch官方教程文档 学习PyTorch中神经网络 包括 定义网络 损失函数 反向传播 更新权重 根据自己的理解和试验 为代码添加少量注解 具体代码如下 from fut
  • C++中 Map的了解与基本用法(代码演示+自我总结+map中一对多的用法)

    C 中 map的了解与基本用法 代码演示 一 map的基本认识 Map是STL的一个关联容器 它提供一对一 其中第一个可以称为关键字 每个关键字只能在map中出现一次 第二个可能称为该关键字的值 的数据处理能力 由于这个特性 它完成有可能在
  • Linux添加多个python / R kernel

    安装多个python kernel 激活想要添加的python环境 pip 安装配置 激活想要添加新kernel的环境 source activate pytorch pip install ipykernel python m ipyke
  • wordcloud安装板版本

    https www lfd uci edu gohlke pythonlibs wordcloud
  • jupyter notebook一直显示“内核正在启动,请等待”,或者内核启动失败

    在使用anaconda自带的工具jupyter notebook时 添加完虚拟环境的内核 在jupyter notebook中打开相应虚拟环境的编辑器时一直显示内核正在启动 请等待 即使等待很久之后 也是内核启动失败 该问题是笔者在安装py
  • 如何运营好一个自媒体账号?

    想要做自媒体赚钱 并不只是拍摄或剪辑好视频就可以了 还需要懂一些账号运营小技巧 如何运营呢 今天这期内容 大周就来分享几点干货 记得先点赞收藏起来 1 用户调查 我们做自媒体之前 要先做好用户调查 这样我们才能更好的获得精准流量 并推广自己
  • 全系光谱完整版

    宇宙射线也叫电磁波 其中包含 射线 X射线 紫外线 可见光 红外线 近红外 远红外 还有无线电和超声波 无线电波是振荡电路中自由电子作周期性的运动产生的 红外线 可见光 紫外线是原子外层电子受激发产生的 X射线是原子内层电子受激发产生的 射
  • java中函数和数组

    函 数 为了提高代码的复用性 可以将其定义成一个单独的功能 该功能的体现就是java中的函数 函数就是体现之一 数 组 用于存储同一类型连续存放数据的一个容器 好处 可以对该容器中的数据进行编号 从0开始 数组用于封装数据 就是一个具体的实
  • C++中基本数据类型字节数及取值范围

    机器字长 是指计算机进行一次整数运算所能处理的二进制数据的位数 整数运算即定点整数运算 机器字长也就是运算器进行定点数运算的字长 通常也是CPU内部数据通路的宽度 现在一般为32位即4个字节 也有64位和16位的 算术类型的存储空间按照机器