C++的数据类型是用来对内存的指定区域描述含义及可执行操作的。

 

类型 含义 最小尺寸
bool 布尔类型 未定义
char 字符 8位
wchar_t 宽字符 16位
char16_t Unicode字符 16位
char32_t Unicode字符 32位
short 短整形 16位
int 整型 16位
long 长整型 32位
long long 长整型(C++11) 64位
float 单精度浮点数 6位有效数字
double 双精度浮点数 10位有效数字
long double 扩展精度浮点数 10位有效数字
     

有效数字:一个数学概念具体讲就是 从左边第一个不是0的数字起,到末位数止,这中间所有的数字都叫这个近似数字的有效数字

wchar_t、char16_t、char32_t都是用来放字符的,其实字符也很有意思,我会专门写一个篇外篇来讲述一下 感兴趣的可以看一下 https://www.cnblogs.com/ChattyKu/p/9408260.html

所有内置类型都列出来了,并没有多少。

好像一张表已经表示了所有,没有更多的知识点了。然而更重要的是下面的内容,甚至比类型都重要。

首先说说这些类型是怎么放在内存中的

(别说你不想了解,它就好像不同材质的杯子具有不同的特性,玻璃杯子一摔就破,而塑料或者金属的则不存在这种风险。这种认知是基于你对材料特性的了解而得出的)

如何将它们解释为不同的类型

首先,所有的信息都存储在内存或硬盘中,先来看看它们什么样

 

在程序员眼中,内存是无数个小房子(数量大小取决于你的内存容量)

每个房子只有两种可能 0 或者 1

要访问这些房子,就需要房子的门牌号码,而这个门牌号就是我们所说的内存地址

地址有了,就可以获取或者修改房子里的东西了

等等,不是说只有0或1么,哪来的其他的东西。

然后,对于C++而言,类型决定了如何去解读一段内存。

类型决定了它所占的大小以及解读的方式

就像一个笑话 胸前的口袋,装一支笔学生,装两支笔会计,装三支笔教授,装四支笔卖笔的商贩

而今天我们读到的类型就是用来解释内存的一种规定。

来看看用不同的类型解读一段相同的内存会有什么不同

 1 #include <iostream>
 2 
 3 int main()
 4 {
 5     int a = 58;
 6     void* pa = &a;
 7     std::cout << "bool:" << *(bool*)pa // 强制将指针转换为指定的类型,不经过系统的类型转换机制,直接扭转一段内存的类型属性
 8     << "nchar:" << *(char*)pa
 9     << "nwchar_t:" << *(wchar_t*)pa 
10     << "nchar16_t:" << *(char16_t*)pa 
11     << "nchar32_t:" << *(char32_t*)pa 
12     << "nshort:" << *(short*)pa 
13     << "nint:" << a
14     << "nlong:" << *(long*)pa 
15     << "nlong long:" << *(long long*)pa 
16     << "nfloat:" << *(float*)pa 
17     << "ndouble:" << *(double*)pa 
18     << "nlong double:" << *(long double*)pa ;
19     return 0;
20 }

 

另外告诉大家一个秘密,这个代码每次运行的结果都不是完全一样的

原因在于我们使用int进行初始化,所以序号1 2 3 4四行被按照要求初始化了,但是序号4 5 6 7 四行的内存空间值是随机的

当类型的解析大于4个字节(也就是32位)的时候,值就会变成一个不可预测的值

其实关于内存布局,还有一些有意思的事情,我会单独写文章来说说他们

 

在C++中还有一个重要的类型描述,有符号和无符号

使用signed和unsigned 来表示,不写默认就是signed所以在代码中我们一般只会看到unsigned

是否带有符号则决定了类型的表示范围

char这个类型,带符号表示-128 - 127,无符号表示 0 - 255

这里得出这个结果非常简单,char由8个位组成,八个0和1一共有256(2的8次方)种不同的组合,所以能表示的数一共256个

其他的类型也可以通过类似的算法来得出表示范围。

 

接下来要敲黑板、划重点了

请记住并尽量去运用下面关于类型选择的一些建议

1. 当明确知晓数值不可能为负值时,选用无符号类型

2. 使用int进行整数计算。因为它与机器字长相同,所以效率最高

3. 计算表达式中不要使用char 或bool。因为char在不同的机器上是否有符号也不同,在C++标准中并没有强制规定

4. 浮点运算请使用double,原因与2相同

 

内置类型以及类型的作用差不多就这些

其实在C++作为一种强类型的语言,在类型的学习上一定要多下功夫,虽然内置类型很少,但是自定义类类型为我们开辟了无比广阔的空间

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程