Preface
为帮助7 ~ 8岁龄儿童学习C++,本章节尽量使用儿童可以理解的语言和例子,对计算机的组成、工作原理进行粗略的讲解。
对于单片机原理,汇编语言,操作系统,通信原理,概不涉及。
对于数字/逻辑电路,以能够理解2进制的加减运算,和进行逻辑判断为目的进行简单扼要的说明。
讲解过程切记要举例合适,不用成年人的思维去要求儿童的理解能力,更不要以计算机专业的知识储备去要求孩子。切记:兴趣比技能重要。
0. 预备知识-计算机基础
0.1. 协议
协议 = 约定,大家都要遵守,才能达到目标。为了方便理解,本文约定:
约定1:核心知识这样表示:
这种灰色的框里面是核心知识
约定2:示例代码这样表示:
printf("hello world!"); //这种黑色框里面是示例代码
约定3:例题这样表示:
- 例:这里是例题
约定4:备注这样表示:
备注:这里是备注内容
约定5:参考文献按如下方式表示,其中无法确定的信息将被省略:
【参考文献】:
[引用编号]. 作者. 文章标题[文章类型]. 发行商, 发行日期.
0.2. 二进制
逢二进位
红绿灯表示法:💔代表0,💚代表1
- 例0-2-1:2+1=3
| 10进制 | 2进制 | 红绿灯表示法 | |
|---|---|---|---|
| A | 2 | 00000010 | 💔💔💔💔💔💔💚💔 |
| B | 1 | 00000001 | 💔💔💔💔💔💔💔💚 |
| 加法结果 | 3 | 00000011 | 💔💔💔💔💔💔💚💚 |
- 例0-2-2:2+2=4
| 10进制 | 2进制 | 红绿灯表示法 | |
|---|---|---|---|
| A | 2 | 00000010 | 💔💔💔💔💔💔💚💔 |
| B | 2 | 00000010 | 💔💔💔💔💔💔💚💔 |
| 加法结果 | 4 | 00000100 | 💔💔💔💔💔💚💔💔 |
2的N次幂(背熟8位内的数字)
| 位号 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| 幂次 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 代表的值(10进制) | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
- 例0-2-3:255怎么表示?
答:因为255=128+64+32+16+8+4+2+1,所以在计算机中可以表示为11111111
| 位号 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| 代表的值(10进制) | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 红绿灯表示法 | 💚 | 💚 | 💚 | 💚 | 💚 | 💚 | 💚 | 💚 |
| 二进制表示 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
8位=1字节,1个字节无符号取值范围是0 ~ 255共计256个数字,有符号数是-128 ~ 127共计256个数字
0.3. 逻辑门
- 与门真值表
| A=0 | A=1 | |
|---|---|---|
| B=0 | 0 | 0 |
| B=1 | 0 | 1 |
- 或门真值表
| A=0 | A=1 | |
|---|---|---|
| B=0 | 0 | 1 |
| B=1 | 1 | 1 |
- 非门真值表
| A=0 | A=1 |
|---|---|
| 1 | 0 |
0.4. 内存/寄存器
地址是“门牌号”,让我们能够根据“门牌号”找到数字的“家”
高低位:左侧是高位,右侧是地位
寄存器和内存都可以存放东西,寄存器快而小,内存慢而大,因为寄存器在CPU内部
索引跟幂次一样从0开始
| 地址编号 | H | G | F | E | D | C | B | A |
|---|---|---|---|---|---|---|---|---|
| 高低位 | 最高位 | 第7位 | 第6位 | 第5位 | 第4位 | 第3位 | 第2位 | 最低位 |
| 索引 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 地址里面放东西 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 |
| 地址里面放东西的红绿灯表示法 | 💔 | 💚 | 💔 | 💚 | 💚 | 💔 | 💚 | 💔 |
0.5. CPU指令集
不同的CPU有自己的逻辑门实现,以及不同的编程“约定”。
在大部分CPU的指令集中,mov(英文move)是“存放”指令,add(英文addition)是“加法”指令,我们约定好,如果要使用这两个命令,需要使用如下格式:
mov 要存放数字的寄存器地址 要存放的“东西”
add 加数1所在的地址 加数2
- 例0-5-1:根据“约定”,当我们需要计算机计算8+19时,汇编语言源代码为:
mov AX 8 // 把数字8放入寄存器AX
add AX 19 // 把寄存器AX里的数字+19,结果还是放在AX中
0.6. 有符号和无符号二进制加减法
正数的绝对值是它本身,负数的绝对值是去掉负号,在笛卡尔平面直角坐标系中绝对值可以表示“距离”的概念
- 例0-6-1:写出3,-7的绝对值
| 数 | 绝对值 |
|---|---|
| 3 | 3 |
| -7 | 7 |
最高位“约定”为符号位
在计算机中表示一个有符号数,使用0代表正数,1代表负数:
- 例0-6-2:计算机如何表示-8?
| 位号 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| 红绿灯表示法 | 💚 | 💔 | 💔 | 💔 | 💚 | 💔 | 💔 | 💔 |
| 有符号2进制 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
问题: 在有符号的表示方法中,8位二进制最大能表示的正数是多少?
源码、反码、补码
- 例0-6-3:十进制数8的原码是多少?
答:00001000
反码是按位取反
- 例0-6-4:写出十进制数8的反码
| 十进制数 | 源码 | 反码 |
|---|---|---|
| 8 | 00001000 | 11110111 |
补码=负数的绝对值的原码按位取反再加1
- 例0-6-5:写出十进制数-8的补码
第一步:-8的绝对值是8
第二步:8的原码=0 0 0 0 1 0 0 0
第三步:8的反码=1 1 1 1 0 1 1 1
第四步:反码加1=1 1 1 1 1 0 0 0
答:-8的补码是1 1 1 1 1 0 0 0
问:如果+1后进位变成9位了怎么办?
答:溢出位不要了,我们只有8位可用(目前我们只看8位,也就是1个字节)
计算机减法:A-B = A + (-B) = A的二进制源码 + B的补码(溢出位丢弃)
- 例0-6-6:计算机计算64-8
第一步:64的原码=0 1 0 0 0 0 0 0
第二步:-8的补码=1 1 1 1 1 0 0 0
第三步:加法结果=0 0 1 1 1 0 0 0
| 操作数 | 原码/补码 |
| 64 | 0 1 0 0 0 0 0 0 |
| -8 | 1 1 1 1 1 0 0 0 |
| 求和 | (1) 0 0 1 1 1 0 0 0 |
00111000转10验算结果=32+16+8=56
【参考文献】:
[1]. 偶尔有点小迷糊. 『教程』补码怎么来的?. 哔哩哔哩, 2021-05-14.
0.7. 小学数学四则运算
计算机中的常见运算符号:
加 +
减 -
乘 *
除 /
取模 %
取模运算是求两个数相除的余数
0.8. 计算机及编程语言的进化史
计算机及编程的雏形
-
雅卡尔提花机:1801年发明

【参考文献】:
[2]. xion. 从机器到人工智能的千年演进. 艺术档案, 2016-06-28. -
自动钢琴:19世纪末使用打孔纸卷自动弹奏的钢琴,1908年“布法罗公约”统一了纸卷格式

【参考】:
[3]. 玛莎·泰勒. 1880–1930年,美国钢琴制造业的立式琴箱风格. 乐都城(青岛)国际音乐谷有限责任公司, 2012. -
穿孔制表机:美国统计专家霍列瑞斯博士(H.Hollerith)发明,用于美国1890年人口普查中


【参考】:
[4]. _逸之. 制表机——穿孔时代的到来. 优快云, 2019-11-10.
[5]. 百度百科. 制表机, 2022-09-05.
计算机代际分类
电子管 -> 晶体管 -> 中小规模集成电路 ->大/超大规模集成电路
- 第一台电子管计算机:1946年2月14日,ENIAC在美国宾夕法尼亚大学诞生
【参考】:
[6]. 程序员客栈. 计算机简史:所有这些时刻,终将流失在时光中,一如眼泪消失在雨里. 知乎, 2022/11/02.

编程语言进化过程
二进制 -> 汇编语言 -> 高级编程语言
存储介质进化过程
机械存储(打孔纸带)-> 磁存储时代(磁环、磁带) -> 硬盘时代 -> 闪存时代
【参考】:
[7]. 智能制造. 数据存储技术的进化和跃迁. 知乎, 2023/09/22.
0.9. 编译原理(简化版)
编程语言 -> 编译器 -> 目标代码(CPU指令/集) -> 链接器(连接启动代码和库代码) -> 可执行程序 -> 运行
0.10. ASCII码表
由前面的学习内容可知,8位二进制有符号数最大代表的正整数是127,所以可定义计算机使用的字符如下:
| 二进制 | 八进制 | 十进制 | 十六进制 | 字符/缩写 | 解释 |
|---|---|---|---|---|---|
| 00000000 | 000 | 0 | 00 | NUL (NULL) | 空字符 |
| 00000001 | 001 | 1 | 01 | SOH (Start Of Headling) | 标题开始 |
| 00000010 | 002 | 2 | 02 | STX (Start Of Text) | 正文开始 |
| 00000011 | 003 | 3 | 03 | ETX (End Of Text) | 正文结束 |
| 00000100 | 004 | 4 | 04 | EOT (End Of Transmission) | 传输结束 |
| 00000101 | 005 | 5 | 05 | ENQ (Enquiry) | 请求 |
| 00000110 | 006 | 6 | 06 | ACK (Acknowledge) | 回应/响应/收到通知 |
| 00000111 | 007 | 7 | 07 | BEL (Bell) | 响铃 |
| 00001000 | 010 | 8 | 08 | BS (Backspace) | 退格 |
| 00001001 | 011 | 9 | 09 | HT (Horizontal Tab) | 水平制表符 |
| 00001010 | 012 | 10 | 0A | LF/NL(Line Feed/New Line) | 换行键 |
| 00001011 | 013 | 11 | 0B | VT (Vertical Tab) | 垂直制表符 |
| 00001100 | 014 | 12 | 0C | FF/NP (Form Feed/New Page) | 换页键 |
| 00001101 | 015 | 13 | 0D | CR (Carriage Return) | 回车键 |
| 00001110 | 016 | 14 | 0E | SO (Shift Out) | 不用切换 |
| 00001111 | 017 | 15 | 0F | SI (Shift In) | 启用切换 |
| 00010000 | 020 | 16 | 10 | DLE (Data Link Escape) | 数据链路转义 |
| 00010001 | 021 | 17 | 11 | DC1/XON (Device Control 1/Transmission On) | 设备控制1/传输开始 |
| 00010010 | 022 | 18 | 12 | DC2 (Device Control 2) | 设备控制2 |
| 00010011 | 023 | 19 | 13 | DC3/XOFF (Device Control 3/Transmission Off) | 设备控制3/传输中断 |
| 00010100 | 024 | 20 | 14 | DC4 (Device Control 4) | 设备控制4 |
| 00010101 | 025 | 21 | 15 | NAK (Negative Acknowledge) | 无响应/非正常响应/拒绝接收 |
| 00010110 | 026 | 22 | 16 | SYN (Synchronous Idle) | 同步空闲 |
| 00010111 | 027 | 23 | 17 | ETB (End of Transmission Block) | 传输块结束/块传输终止 |
| 00011000 | 030 | 24 | 18 | CAN (Cancel) | 取消 |
| 00011001 | 031 | 25 | 19 | EM (End of Medium) | 已到介质末端/介质存储已满/介质中断 |
| 00011010 | 032 | 26 | 1A | SUB (Substitute) | 替补/替换 |
| 00011011 | 033 | 27 | 1B | ESC (Escape) | 逃离/取消 |
| 00011100 | 034 | 28 | 1C | FS (File Separator) | 文件分割符 |
| 00011101 | 035 | 29 | 1D | GS (Group Separator) | 组分隔符/分组符 |
| 00011110 | 036 | 30 | 1E | RS (Record Separator) | 记录分离符 |
| 00011111 | 037 | 31 | 1F | US (Unit Separator) | 单元分隔符 |
| 00100000 | 040 | 32 | 20 | (Space) | 空格 |
| 00100001 | 041 | 33 | 21 | ! | |
| 00100010 | 042 | 34 | 22 | " | |
| 00100011 | 043 | 35 | 23 | # | |
| 00100100 | 044 | 36 | 24 | $ | |
| 00100101 | 045 | 37 | 25 | % | |
| 00100110 | 046 | 38 | 26 | & | |
| 00100111 | 047 | 39 | 27 | ' | |
| 00101000 | 050 | 40 | 28 | ( | |
| 00101001 | 051 | 41 | 29 | ) | |
| 00101010 | 052 | 42 | 2A | * | |
| 00101011 | 053 | 43 | 2B | + | |
| 00101100 | 054 | 44 | 2C | , | |
| 00101101 | 055 | 45 | 2D | - | |
| 00101110 | 056 | 46 | 2E | . | |
| 00101111 | 057 | 47 | 2F | / | |
| 00110000 | 060 | 48 | 30 | 0 | |
| 00110001 | 061 | 49 | 31 | 1 | |
| 00110010 | 062 | 50 | 32 | 2 | |
| 00110011 | 063 | 51 | 33 | 3 | |
| 00110100 | 064 | 52 | 34 | 4 | |
| 00110101 | 065 | 53 | 35 | 5 | |
| 00110110 | 066 | 54 | 36 | 6 | |
| 00110111 | 067 | 55 | 37 | 7 | |
| 00111000 | 070 | 56 | 38 | 8 | |
| 00111001 | 071 | 57 | 39 | 9 | |
| 00111010 | 072 | 58 | 3A | : | |
| 00111011 | 073 | 59 | 3B | ; | |
| 00111100 | 074 | 60 | 3C | < | |
| 00111101 | 075 | 61 | 3D | = | |
| 00111110 | 076 | 62 | 3E | > | |
| 00111111 | 077 | 63 | 3F | ? | |
| 01000000 | 100 | 64 | 40 | @ | |
| 01000001 | 101 | 65 | 41 | A | |
| 01000010 | 102 | 66 | 42 | B | |
| 01000011 | 103 | 67 | 43 | C | |
| 01000100 | 104 | 68 | 44 | D | |
| 01000101 | 105 | 69 | 45 | E | |
| 01000110 | 106 | 70 | 46 | F | |
| 01000111 | 107 | 71 | 47 | G | |
| 01001000 | 110 | 72 | 48 | H | |
| 01001001 | 111 | 73 | 49 | I | |
| 01001010 | 112 | 74 | 4A | J | |
| 01001011 | 113 | 75 | 4B | K | |
| 01001100 | 114 | 76 | 4C | L | |
| 01001101 | 115 | 77 | 4D | M | |
| 01001110 | 116 | 78 | 4E | N | |
| 01001111 | 117 | 79 | 4F | O | |
| 01010000 | 120 | 80 | 50 | P | |
| 01010001 | 121 | 81 | 51 | Q | |
| 01010010 | 122 | 82 | 52 | R | |
| 01010011 | 123 | 83 | 53 | S | |
| 01010100 | 124 | 84 | 54 | T | |
| 01010101 | 125 | 85 | 55 | U | |
| 01010110 | 126 | 86 | 56 | V | |
| 01010111 | 127 | 87 | 57 | W | |
| 01011000 | 130 | 88 | 58 | X | |
| 01011001 | 131 | 89 | 59 | Y | |
| 01011010 | 132 | 90 | 5A | Z | |
| 01011011 | 133 | 91 | 5B | [ | |
| 01011100 | 134 | 92 | 5C | \ | |
| 01011101 | 135 | 93 | 5D | ] | |
| 01011110 | 136 | 94 | 5E | ^ | |
| 01011111 | 137 | 95 | 5F | _ | |
| 01100000 | 140 | 96 | 60 | ` | |
| 01100001 | 141 | 97 | 61 | a | |
| 01100010 | 142 | 98 | 62 | b | |
| 01100011 | 143 | 99 | 63 | c | |
| 01100100 | 144 | 100 | 64 | d | |
| 01100101 | 145 | 101 | 65 | e | |
| 01100110 | 146 | 102 | 66 | f | |
| 01100111 | 147 | 103 | 67 | g | |
| 01101000 | 150 | 104 | 68 | h | |
| 01101001 | 151 | 105 | 69 | i | |
| 01101010 | 152 | 106 | 6A | j | |
| 01101011 | 153 | 107 | 6B | k | |
| 01101100 | 154 | 108 | 6C | l | |
| 01101101 | 155 | 109 | 6D | m | |
| 01101110 | 156 | 110 | 6E | n | |
| 01101111 | 157 | 111 | 6F | o | |
| 01110000 | 160 | 112 | 70 | p | |
| 01110001 | 161 | 113 | 71 | q | |
| 01110010 | 162 | 114 | 72 | r | |
| 01110011 | 163 | 115 | 73 | s | |
| 01110100 | 164 | 116 | 74 | t | |
| 01110101 | 165 | 117 | 75 | u | |
| 01110110 | 166 | 118 | 76 | v | |
| 01110111 | 167 | 119 | 77 | w | |
| 01111000 | 170 | 120 | 78 | x | |
| 01111001 | 171 | 121 | 79 | y | |
| 01111010 | 172 | 122 | 7A | z | |
| 01111011 | 173 | 123 | 7B | { | |
| 01111100 | 174 | 124 | 7C | | | |
| 01111101 | 175 | 125 | 7D | } | |
| 01111110 | 176 | 126 | 7E | ~ | |
| 01111111 | 177 | 127 | 7F | DEL (Delete) | 删除 |
【参考文献】:
[8]. 偶尔有点小迷糊. 文字频频乱码 这背后是显卡的扭曲还是规则的沦丧?. 哔哩哔哩, 2020-06-24
1. 学习内容
1.1. 创建项目
文件-》新建-》项目
1.2. 创建程序入口
项目管理-》main.cpp
1.3. 快捷键
IDE中的一级快捷键要按ALT+键位名称,再按二级快捷键使用对应功能
- 例:创建新项目:ALT+F(文件),N(新建),P(项目)
编写代码过程中,常用的快捷键:
| 快捷键 | 作用 |
|---|---|
| CTRL+S | 保存当前编辑的文件 |
| CTRL+W | 关闭当前编辑的文件 |
| CTRL+C | 复制 |
| CTRL+V | 粘贴 |
| CTRL+Z | 撤销 |
| CTRL+SHIFT+Z | 重做 |
| F9 | 编译 |
| F10 | 运行 |
| F5 | 调试 |
| F7 | (调试过程中)下一步 |
1.4. 编写代码
- 让计算机给我们输出:hello world!
- 让计算机帮我们计算加减乘除
1.5. 存储结构
- 浮点数的存储

【参考】:
[9]. IEEE. 754-2019 - IEEE Standard for Floating-Point Arithmetic[S]. ISBN:978-1-5044-5924-2, DOI: 10.1109/IEEESTD.2019.8766229, 22 July 2019.
[10]. ayusharma0698. IEEE Standard 754 Floating Point Numbers. geeksforgeeks, 16 Mar, 2020
[11]. 蒋佳诚. 单精度浮点数(float32)存储与表示方式. 知乎, 2023/08/15.
[12]. free-coder. float是如何在计算机中存储的. 哔哩哔哩, 2020/02/15.
1.6. 数据类型
为了方便理解,我们对照数学中的概念:
| C/C++数据类型 | 数学定义 |
|---|---|
| 整型 | 整数 |
| 浮点型 | 实数 |
备注:实数=有理数(整数(自然数(正整数+0)+负整数)+不循环小数+无限循环小数)+ 无理数
- 各数据类型在计算机中的存储大小如下:

【参考】:
[13]. 程序员Linc. 青少年编程科普—C++数据类型取值范围解析. 知乎, 2023-12-01.
1.7. 变量、函数的声明
定义变量:
数据类型 变量名称 = 值
定义函数:
返回值的类型 函数的名称 (函数的参数列表,参数中间用“,”隔开) {
函数的内容
}
2. Q&A of L1
2.1. 计算机在哪?编译输出的结果都是什么意思?
-
说法一:计算机由控制系统,运算系统,输入输出(IO)系统,存储系统,数据通路(总线)五部分组成;
-
说法二:计算机由控制系统,运算系统,输入系统(Input),输出系统(Output),存储系统五部分组成;
再具体一些,就是在物理上,使用不同的材料,实现的逻辑门电路的集群,构成了“计算机”,计算机按照约定的顺序和位置,不停的执行人类的指令。为了让人类能够灵活的,自由的使用计算机内部的各种器件,人类编写了一个庞大的软件,称为“操作系统”,它负责协调组织计算机的所有“硬件”。
2.2. 什么是数据的类型?
- 数学里的数据类型:
正整数:1………………999
自然数:0,1………………999
整数:正整数,0,-1(自然数 +负整数)
有理数 = 整数 + 分数/小数(不循环小数+ 无限循环小数)
无理数 = 无限不循环小数
实数 = 有理数 + 无理数
复数 = 实数 + 虚数
- C++的数据类型:
整数:int
小数:float(比较小的小数) double(比较大的小数)
字符(串):char char* string
布尔类型:true/false 真/假 (记住非0即真)
- 数据结构:
数组 = 一群数字组成的队列 {1,2,3,4,5…}
2.3. 编写程序的格式:
声明变量和定义函数,都是在告诉计算机,我们需要用到它能提供的某些资源,为了不然计算机误解,所以人类提前约定好了严格的编写格式,编译器也是严格遵循格式进行编译,这其实就是提前约定的好的“协议”,如下格式约定了如何定义变量:
数据类型 变量名称 = 值
例:
int a = 1;
2.4. 要跟计算机说的话可以写在大括号外面吗? 有区别吗?如果有多个大括号呢?
作用域和生命周期
2.5. 为什么要让计算打印的话都要用printf和()和“”呢?结束都要用; 呢?
-
库的引用
-
不同数据类型的数据的书写格式及输出占位符; 参数的传递(形参/实参)
-
注释前面为什么要加/呢?为什么注释错了没关系呢?
单行注释,多行注释,书写规范
2.6. 变量的使用
变量的赋值
- 例2-6-1:int a = 9; 是什么意思?
答:申请一个内存“盒子”,里面放上数字9
其中:
int是让计算机准备一块内存空间
a给这块内存空间起名a
=是让计算机把=后面的值,放入=前面的内存空间中
9是要放入内存的数字
;是告诉计算机,这条指令结束了
变量参与计算
ret = ret * 9;
备注:断点调试可以检查变量的值
下一课:CPP-L2备课记录

被折叠的 条评论
为什么被折叠?



