【共读Primer】7.<2.1> 基本内置…
2018-08-02 05:43:53来源:博客园 阅读 ()
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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Unsolved --> Solved OJ思路题解 2020-05-30
- Building & Debugging chromium on CLion for Linu 2020-05-19
- 洛谷P1164->小A点菜 2020-05-18
- 表达式·表达式树·表达式求值 2020-04-29
- STL之<string> 2020-04-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash