首页 > 编程语言 >梳理C++各种数据类型所占字节数和表示范围

梳理C++各种数据类型所占字节数和表示范围

时间:2023-11-03 20:34:18浏览次数:37  
标签:字节数 int 32 数据类型 long C++ 4B

Outline

1.数据类型所在字节数与程序运行平台有关
2.列举各种数据类型所占字节数

1.数据类型所在字节数与程序运行平台有关

不同的平台上对不同数据类型分配的字节数是不同的。
平台环境的理解:硬件架构 操作系统(OS) 编译器(Compiler)
程序的运行环境取决于上述配件。
原因:
64位机器也可以装32位系统(x64装XP);
32位机器上可以有16/32位的编译器;
即使是32位的编译器也可以弄出64位的integer来(int64)。

理论上讲 某种数据类型在我这种运行环境下占多大内存空间,应该是有CPU决定,因为真正执行指令,调度操作的是CPU,但我认为实际上是由编译器事先决定,在编译期间,会决定考虑为该类型分配多少内存。

2.32位的环境下,基本数据类型所占字节

数据类型 所占字节
char 1B
short int(short) 2B
int 4B
unsigned int 4B
float 4B
double 4B
long int(long) 4B
long long 8B
unsigned long 4B
char* 4B

注意:指针变量所占的字节数与数据类型无关(与什么数据类型的指针没有关系),而是与多少位的环境有关,因为这决定了该环境的机器的寻址能力有多大!
比如:32位的环境 其中一个bit位要么是0要么是1,因此32位做多能表达2^32个地址空间,同理64位的环境,指针变量占64bit即8B。

另外,以32位机 int类型为例 来计算其取值范围:int类型占4B即32位 由于int是符号型 也就是说要去除1个bit位表示符号位(正负),其次数值0计算了两次 因此也要-1
也即:[-2^31 ~ 2^31-1]

3. 64位的环境下,基本数据类型所占字节

数据类型 所占字节
char 1B
short int(short) 2B
int 4B
unsigned int 4B
float 4B
double 8B
long int(long) 8B
long long 8B
unsigned long 8B

4. sizeof()关键字(保留字) 【并非是一个函数】

作用:sizeof关键字可以统计数据类型所占用的内存大小
语法:sizeof(变量名) sizeof(数据类型)

注意:在定义实型(浮点数类型)中的float时,应当在具体数值后边加上 f 如下:
float f1 = 3.1415926535f;
原因在于:float类型表示小数时,在数字末尾显式地使用字母f表示单精度,否则编译器会默认将小数视为双精度浮点型(double),再进行类型转换(由double型转换为float型)。

标签:字节数,int,32,数据类型,long,C++,4B
From: https://www.cnblogs.com/zxLai/p/17808314.html

相关文章

  • 使用C++实现Range序列生成器
    在C++编程中,经常需要迭代一系列数字或其他可迭代对象。通常,这需要编写复杂的循环结构,但有一种精妙的方法可以使这一过程变得更加简单和可读。如果你使用过Python语言那么一定对Range语句非常的数据,我们可以使用C++来实现一个简单的Range封装,如下代码定义了一个名为Range的命名空间......
  • 使用C++实现Range序列生成器
    在C++编程中,经常需要迭代一系列数字或其他可迭代对象。通常,这需要编写复杂的循环结构,但有一种精妙的方法可以使这一过程变得更加简单和可读。如果你使用过Python语言那么一定对Range语句非常的数据,我们可以使用C++来实现一个简单的Range封装,如下代码定义了一个名为Range的命名空间,......
  • C++ float与double类型的简单区别
    1.有效位数与精度有效位和精度的两个概念是不同的,我们先说float和double各自的有效位。在float与double中默认的有效位都是6位有效位,意思就是从第一个不为0的数字算起有6个数字是有效的后边无效的数字也不会显示,如下图:代码:运行结果:可以看出不管你的float定义的有多少位小......
  • C++ 字符串与数值间的转换(只归纳了常用情况)
    很多编程中字符串与数字间的转换是一种常见的需求下面总结了C++中字符串与数值间是如何进行转换的。目录:1.字符串转数字(C版本)2.字符串转数字C++风格3.数字转字符串1.字符串转数字(C版本)strings1="123";strings2="123.1";inti=atoi(s1.c_str());......
  • C++的对象与类的含义
    C++是一门面向对象的编程语言,理解C++需要掌握类(class)和对象(object)这两个概念。C++中的类(Class)可以看做C语言中结构体(Struct)的升级版。结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同;可以通过结构体来定义结构体变量,每个变量拥有相同的性质。例如:#include<s......
  • C++头文件和std命名空间
    C++是在C语言的基础上开发的,早期的C++还不完善,不支持命名空间,没有自己的编译器,而是将C++代码翻译成C代码,再通过C编译器完成编译。这个时候的C++仍然在使用C语言的库,stdio.h、stdlib.h、string.h等头文件依然有效;此外C++也开发了一些新的库,增加了自己的头文件,例如:iostream......
  • C++函数重载
    在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是int、float、char、bool等,我们需要通过参数把变量的地址传入函数内部。在C语言中,程序员往往需要分别设计出三个不同名的函数,其函数原型与下面类似:voidsw......
  • C++类成员的访问权限以及类的封装
    C++通过public、protected、private三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。所谓访问权限,就是你能不能使用该类中的成员。Java、C#程序员注意,C++中的public、private、protected只能修饰类的成员,不能修饰类......
  • C++构造函数初始化列表
    构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用初始化列表。C++构造函数的初始化列表使得代码更加简洁,请看下面的例子:#include<iostream>usingnamespacestd;classStudent{private:......
  • C++使用多线程将数据写入文件
    #include<iostream>#include<vector>#include<thread>#include<fstream>//使用多线程将数据写入文件voidwriteToFile(conststd::vector<std::string>&data,conststd::string&filename){//创建一个文件输出流std::ofstreamfile......