数据类型
字节占用
位宽
概念
在C++中,位宽指的是数据类型或变量可以存储的二进制位数。它决定了一个变量可以表示的最大值和最小值的范围,以及所占用的存储空间大小。
在C++中,不同的数据类型有不同的位宽。例如,char
类型通常占用1个字节(8位),而int
类型在大多数系统上占用4个字节(32位)。了解这些数据类型的位宽对于编写高效且可移植的代码至关重要。
类型修饰符
在C++中,类型修饰符(Type Modifiers)用于改变变量、函数或类成员等的默认行为或属性。
默认情况下,int、short、long都是带符号的,即 signed。
在不引发歧义的情况下,允许省略部分修饰关键字,或调整修饰关键字的顺序。这意味着同一类型会存在多种等价表述。例如
int
,signed
,int signed
,signed int
表示同一类型,而unsigned long
和unsigned 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
获取字节的位数。
字符型(char):通常占用1个字节,即8位。
短整型(short):通常占用2个字节,即16位。
整型(int):通常占用4个字节,即32位。不过在某些系统中可能是2个字节。
长整型(long):在32位系统上通常占用4个字节,而在64位系统上则可能占用8个字节。
浮点型(float):通常占用4个字节,即32位。
双精度浮点型(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
类型的变量取值只可能为两种:true
和 false
。一般其占用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