数据类型

字节占用

位宽

概念

在C++中,位宽指的是数据类型或变量可以存储的二进制位数。它决定了一个变量可以表示的最大值和最小值的范围,以及所占用的存储空间大小。

在C++中,不同的数据类型有不同的位宽。例如,char类型通常占用1个字节(8位),而int类型在大多数系统上占用4个字节(32位)。了解这些数据类型的位宽对于编写高效且可移植的代码至关重要。

类型修饰符

在C++中,类型修饰符(Type Modifiers)用于改变变量、函数或类成员等的默认行为或属性。

默认情况下,int、short、long都是带符号的,即 signed。

在不引发歧义的情况下,允许省略部分修饰关键字,或调整修饰关键字的顺序。这意味着同一类型会存在多种等价表述。例如 intsignedint signedsigned int 表示同一类型,而 unsigned longunsigned long int 表示同一类型。

数据表示范围

当位宽为$x$时,有符号类型的表示范围为 $ -2^{x-1}\sim 2^{x-1}-1 $, 无符号类型的表示范围为 $0 \sim 2^x-1$. 具体而言,有下表:

位宽
表示范围

$8$

有符号:$-2^{7}\sim 2^{7}-1$, 无符号:$0 \sim 2^{8}-1$

$16$

有符号:$-2^{15}\sim 2^{15}-1$, 无符号:$0 \sim 2^{16}-1$

$32$

有符号:$-2^{31}\sim 2^{31}-1$, 无符号:$0 \sim 2^{32}-1$

$64$

有符号:$-2^{63}\sim 2^{63}-1$, 无符号:$0\sim 2^{64}-1$

基础

C++中的字节占用是指各种数据类型在内存中所占的存储空间大小,了解这些数据类型的字节数对于编写高效且可移植的代码至关重要。

通常,1字节=8位,可通过头文件 <climits>(C++)中的宏常量 CHAR_BIT 获取字节的位数。

  1. 字符型(char):通常占用1个字节,即8位。

  2. 短整型(short):通常占用2个字节,即16位。

  3. 整型(int):通常占用4个字节,即32位。不过在某些系统中可能是2个字节。

  4. 长整型(long):在32位系统上通常占用4个字节,而在64位系统上则可能占用8个字节。

  5. 浮点型(float):通常占用4个字节,即32位。

  6. 双精度浮点型(double):通常占用8个字节,即64位。

总的来说,不同编译器和操作系统可能会有所不同。例如,某些编译器可能会对齐数据,使其占用的内存更多,以提高访问速度。

sizeof()获取字节数

在实际开发中,可以使用sizeof运算符来获取具体数据类型或变量所占用的字节数。

通过sizeof(数据类型)sizeof(变量名)

	cout << "short 类型占用的内存大小:" << sizeof(short) << endl;

	int num = 10;
	cout << "int 类型占用的内存大小:" << sizeof(int) << endl;
	cout << "int 类型占用的内存大小:" << sizeof(num) << endl;
//原文链接:https://blog.csdn.net/newson92/article/details/109675603

基础类型

无类型(void)

void 类型为无类型,与上面几种类型不同的是,不能将一个变量声明为 void 类型。但是函数的返回值允许为 void 类型,表示该函数无返回值。

空指针类型

算术类型

布尔类型(Bool)

一个 bool 类型的变量取值只可能为两种:truefalse。一般其占用1字节,即8位。

整数类型(int)

用于存储整数。

整数类型一般按位宽有 5 个梯度:char,short,int,long,long long,在整型的表示符号int前加上不同的修饰符,就可以将int型扩展成别的类型,如short int:

符号性:

  • signed:表示带符号整数(默认),可被简写位;

  • unsigned:表示无符号整数。

大小:

  • short:表示 至少 16 位整数;

  • long:表示 至少 32 位整数;

  • long long:表示 至少 64 位整数。

浮点类型(float)

用于表示小数数据,而实际应用中通常使用double类型表示浮点数。

分类:

  • 单精度float: 4字节,7位有效数字

  • 双精度double:8字节,15~16位有效数字

  • 长双精度long double:16字节,18~19位有效数字

对特殊值的支持:

  • 无穷:INFINITY

  • 负零:-0.0

  • 非数:NAN

字符类型(char)

字符类型分为宽字符类型和窄字符类型。

后者在目前学习中更常用到,其一般为8位,底层储存方式依然为整数,通过 ASCII 编码 实现字符与整数的一一对应。

分类:

  • signed char:有符号字符表示的类型,表示范围在-128~127之间。

  • unsigned char:无符号字符表示的类型,表示范围在0~255之间。

typedef为已有类型声明新名字

可以通过type def来为一个已有的类型声明一个新名字,如下:

//typedef type newname; 

typedef int zheng_shu;
zhengshu distance = 1;  //通过给整型声明一个新名字,从而声明了一个distance变量

后言

数据类型的转换会在下一节进行整理。

Last updated