在第 11 篇文章中,我们提到 int、double 等数据类型本质上是向系统申请固定大小的内存空间。在第 12 篇文章中,我们看到整数除法(如 5 / 2)会舍弃小数部分,仅保留整数 2。
这些现象的根本原因在于:计算机内部依靠晶体管的高低电平处理数据,只能理解由 0 和 1 组成的二进制。 今天,我们将探讨不同数据类型是如何在二进制架构中存储的,并解释为什么计算机在处理简单的小数运算(如 0.1 + 0.2)时会出现精度偏差。
写在前面的话:这是一系列专为对信奥(信息学奥赛)感兴趣的中小学生及家长朋友们准备的科普文章。笔者受自身学识所限,文中若存在不严谨之处,还望各位读者指正。
本系列文章往期回顾:
第二部分 【C++的奇妙之旅】
- 【信奥业余科普】C++ 的奇妙之旅 | 09:信奥赛场的核心语言------C++ 的前世今生
- 【信奥业余科普】C++ 的奇妙之旅 | 10:代码是如何运行的?------编译过程与"Hello, World"
- 【信奥业余科普】C++ 的奇妙之旅 | 11:程序的处理核心------变量与常用数据类型
- 【信奥业余科普】C++ 的奇妙之旅 | 12:程序的交互与加工------数据的输入与算术运算
一、 二进制整数的存储与极限
我们声明变量 int a = 21; 时,系统会为其分配 4 个字节(Byte)的内存。