【共读Primer】7.<2.1> 基本内置…

2018-08-02 05:43:53来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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都是用来放字符的,其实字符也很有意思,我会专门写一个篇外篇来讲述一下

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

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

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

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

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

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

 

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

每个房子只有两种可能 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++作为一种强类型的语言,在类型的学习上一定要多下功夫,虽然内置类型很少,但是自定义类类型为我们开辟了无比广阔的空间

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:C++结构体与排列三平台出售

下一篇:UOJ#52. 【UR #4】元旦激光炮(交互)