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

发布时间 2023-11-03 20:29:28作者: 少玩手机

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型)。