C++旧版课程库
C++第 1 期查看课程总览

029 内存1

主要内容

1. bool 变量

在之前的课程中,我们学习了 bool 变量。 我们说过,bool 变量的取值范围,是 0 或者 1。(也就是 false 和 true) 现在,大家看,这不就是一个“二进制”吗?

2. 为什么计算机选择了二进制?

其实,这和我们之前讲到的内存,息息相关。 大家还记得吗,内存有一个很重要的特点,就是
  • 断电之后,数据就丢失了。
  • 为什么呢? 这其实啊,这是因为,在内存中,有很多的内存小单元。每个小单元,可以存储一定的电荷。 内存里面的样子,就如下图所示: 我们程序中用到的所有数据,无论是电影、音乐、文件,甚至是我们现在看到的画面, 其实,都是以内存中的某些小单元的“有电/没电”状态,来存储的。 这样,断电以后,所有的小单元都变成了“没电”状态,那当然数据就丢失了。
  • 我们的“数据/信息”,在电脑中,其实就是小单元们的“有电/没电”状态
  • “有电/没电”状态,需要电源供电,才可以保持
  • 或许大家有疑问,为什么我们存放在电脑上的文件,不会因为关机,而丢失呢? 我们的存在电脑的文件,之所以不丢失,是因为它们是存放在硬盘上的。 硬盘的存储技术和内存不同,硬盘在断电后,可以保留数据。
  • 内存的这种存储技术,比硬盘读写速度快;这样程序才不会卡
  • 所以,一般将硬盘用于存储数据内存用于运行程序

    3. 内存的模型

    学习 C++ 的过程中,需要一直和内存打交道。所以为了讨论方便,我们一般将内存画作下面的样子。“有电/没电”状态,用“1/0”表示。 假如,将上图的“有电/没电”状态,写成二进制数的话,请问要怎么写?(请从左边开始,写 8 位即可)
    
    1011 0010
    
    请将其转化成 16 进制数,10 进制数。
    
    0xB2
    178(10进制)
    
    我们可以做一个合理的假设,假如我们运行了下面的代码:
    
    int dashima;
    dashima = 178;
    
    那么,这就是变量 dashima,赋值为 178 后,在内存中的样子。 (当然,这个说法其实不够准确。因为 int 是“很长”的。)

    4. 一个 int

    下图中,两端灰色中间的部分,是一个 int 的长度。所以,这才是上面的例程中的变量 dashima 的在内存中的样子。 请数一数,一个 int 变量的长度,是一个 “bool” 变量的几倍? 答案是 32。

    习题

    课后练习