文章目录
程序入门设计 — C 语言
第二周 核心语法
📝2.4 C 语言笔记 | 计算机存储规则
(隔壁老王也能秒懂!)
存储 = 电脑的"记忆仓库"🧠
- 核心逻辑:电脑把所有东西(照片、文档、游戏进度)都翻译成0和1,存在各种"仓库"里
- 比喻:内存像书桌(临时放正在用的书),硬盘像书柜(长期存书)
🔥 基础概念三件套
| 概念 | 通俗解释 | 生活类比 |
|---|---|---|
| 位(Bit) | 0或1 | 灯泡开关(开=1,关=0) |
| 字节(Byte) | 8个 Bit 组成 | 一个汉字(比如"你") |
| 文件 | 多个字节的集合 | 一本漫画书 |
🌍 常见存储设备
-
内存条(RAM)
(书桌)
- 特点:速度快,但关电脑就清空
- 场景:打游戏时加载的地图数据
-
硬盘
(书柜)
- 机械硬盘(HDD):用磁盘转圈存数据(像老式唱片机)
- 固态硬盘(SSD):用芯片存数据(像U盘)
-
U盘/移动硬盘
(背包)
- 随身携带文件的"移动书包"
⚠️ 萌新必知常识
- 文件大小
- 1张照片≈2-5MB(能存200-500本书)
- 1部电影≈1-2GB(能装满整个书柜)
- 存储速度对比
- 内存 > SSD > HDD(就像书包取书比书柜快)
- 数据安全
- 重要文件要存2份(就像存折放家里和银行)
🧪 简单实验
实验1:看文件大小
- 右键点桌面文件 → 属性
- 看"大小"栏(显示多少KB/MB/GB)
实验2:感受速度差异
- 打开一个大型游戏(加载慢)
- 关闭后重新打开(第二次加载快很多,因为存在内存里)
📌 核心总结
- 0和1统治世界:所有数据都是二进制
- 单位要分清:1GB=1024MB,买硬盘要看实际容量
- 内存≠硬盘:内存快但临时,硬盘慢但永久
下节预告:常见的进制 🚀
📝2.5 C 语言笔记 | 常见的进制
(隔壁老王也能秒懂!)
进制 = 数字的"方言"🗣️
- 核心逻辑:计算机只认0/1,但人类发明了更懒的数字写法
- 比喻:就像用"666"表示"牛",进制是数字的"缩写密码"
🔥 四大常见进制
| 进制 | 基数 | 符号长啥样 | 宿舍场景 |
|---|---|---|---|
| 二进制 | 2 | 0/1 | 宿舍灯开关(开=1,关=0) |
| 八进制 | 8 | 0-7 | 宿舍楼号(1号楼=01) |
| 十进制 | 10 | 0-9 | 食堂饭卡余额 |
| 十六进制 | 16 | 0-9+A-F | 王者皮肤颜色代码(#FF0000) |
🌍 各进制"生存环境"
-
二进制
(计算机DNA)
- 场景:CPU算题、内存存数据、网络传文件
- 例子:
0b1010= 10(宿舍号10写成二进制)
-
十六进制
(程序员最爱)
- 场景:调游戏参数、改网页颜色、看内存地址
- 例子:
0xFF= 255(王者皮肤代码)
-
八进制
(古董级选手)
- 场景:Linux系统权限(
chmod 755) - 例子:
0777= 全权限(慎用!)
- 场景:Linux系统权限(
-
十进制
(人类日常)
- 场景:考试分数、食堂消费、体重数字
- 例子:
100分 = 满绩点(计算机里存成0b01100100)
⚠️ 进制转换避坑指南
-
二进制↔十六进制
🔄
- 懒人技巧:4位二进制=1位十六进制
- 例子:
0b1101_1010→0xDA(直接拼字母)
-
十进制转二进制
🔢
- 懒人技巧:不断÷2取余数
- 例子:13 ÷2=6余1 → 6÷2=3余0 → 3÷2=1余1 → 1÷2=0余1 → 倒过来是
1101
🧪 宿舍实验(5分钟)
实验1:灯开关猜数字
- 宿舍灯开关状态:开=1,关=0
- 连续按5次开关,记录二进制序列
- 翻译成十进制(比如
10101=21)
实验2:外卖颜色代码
- 打开美团,找个外卖店
- 看商家头图颜色代码(比如
#FF5733) - 拆解成红/绿/蓝分量(红=FF,绿=57,蓝=33)
📌 宿舍夜谈总结
- 二进制优先:计算机底层都是0/1
- 十六进制必备:调游戏参数/改网页必备
- 十进制友好:输入输出默认用十进制
下节预告:整数类型 🚀
📝2.6 C 语言笔记 | 整数类型
(隔壁老王看了都说行!)
整数类型 = 给内存"定规矩"📏
- 核心逻辑:告诉电脑这块内存要存多大的整数(就像给抽屉贴标签)
- 比喻:用不同大小的杯子装水——水杯越大,装的水越多
🔥 四大整数类型
| 类型 | 代码示例 | 通俗解释 | 宿舍类比 | 大小(通常) | 范围(32位系统) |
|---|---|---|---|---|---|
| char | char 楼层=3; | 存小整数(宿舍楼层/ASCII码) | 小盒子(放钥匙) | 1字节 | -128~127 |
| short | short 教室=105; | 存中等整数(教室号) | 中号抽屉 | 2字节 | -32768~32767 |
| int | int 饭卡余额=500; | 存常用整数(饭卡/年龄) | 大号抽屉 | 4字节 | -2147483648~2147483647 |
| long long | long long 学号=20200001; | 存超大整数(学号) | 超大行李箱 | 8字节 | -9e18~9e18 |
🌍 整数类型的"超能力"
-
内存规划师
🏠
char:用1个抽屉格子存楼层long long:用8个格子存学号- 后果:用
char存饭卡余额(>127元)→ 数值溢出!
-
值范围警察
👮
unsigned int:0~4294967295(非负数,如人数统计)- 爆雷现场:
unsigned char 温度=-5→ 实际变成251(因为无符号)
-
类型转换刺客
🗡️
int 大数 = 30000; short 小数 = 大数; // 截断!小数变成-31072(32767是short最大值)
⚠️ 萌新必踩坑
-
整数溢出🎣
char 楼层 = 130; // 超出char范围(-128~127) printf("%d", 楼层); // 输出-126(溢出回绕) -
符号陷阱🕳️
unsigned int 倒计时 = 0; 倒计时--; // 变成4294967295(无符号数不会变负数!) -
隐式转换🎭
float 分数 = 95.5; int 整数分数 = 分数; // 直接丢弃小数部分 → 95
🧪 宿舍实验(5分钟)
实验1:内存占位比赛
#include <stdio.h>
int main() {
printf("char占%zu字节\n", sizeof(char));
printf("short占%zu字节\n", sizeof(short));
printf("int占%zu字节\n", sizeof(int));
printf("long long占%zu字节\n", sizeof(long long));
// 输出:1,2,4,8(32位系统)
return 0;
}
实验2:溢出可视化
#include <stdio.h>
#include <limits.h> // 包含类型最大值定义
int main() {
unsigned char 温度 = 255;
温度++; // 溢出回绕到0
printf("温度:%u", 温度); // 输出0
return 0;
}
📌 本节总结
- 先小后大:能
char不用int(省内存) - 明确符号:需要负数用
signed,否则用unsigned - 警惕溢出:超过范围就"回绕"(用
<limits.h>查最大值)
下节预告:浮点数类型 🚀(小数点的生存法则)
📝2.7 C 语言小数类型入门笔记(厨房版)
(隔壁老王看了都说香!)
小数类型 = 给数字"称重量"⚖️
- 核心逻辑:告诉电脑这块内存要存多精确的小数(就像给量杯贴刻度)
- 比喻:用不同精度的厨房工具处理食材——量杯越精细,称量越准
🍳 三大量具家族
| 类型 | 代码示例 | 通俗解释 | 厨房类比 | 大小(通常) | 有效数字 |
|---|---|---|---|---|---|
| float | float 糖量=3.14f; | 单精度浮点数 | 量杯(粗略量) | 4字节 | 6-7位 |
| double | double 菜价=9.98; | 双精度浮点数(默认) | 电子秤(精确) | 8字节 | 15-16位 |
| long double | long double 药剂=0.001L; | 扩展精度浮点数 | 实验室天平 | 12-16字节 | 18-19位 |
🔥 小数类型的"超能力"
-
精度魔术师 🧙
double 披萨直径 = 12.5; // 精确到毫米级 float 蛋糕重量 = 0.25f; // 只能精确到克级后果:用
float存银行利息→ 0.1+0.2可能不等于0.3! -
科学计数法大师 🔬
double 光速 = 3e8; // 3×10^8 米/秒 long double 原子质量 = 1.67e-27; // 超级小的数 -
隐式转换刺客 🗡️
double 大杯奶茶 = 500.5; float 小杯奶茶 = 大杯奶茶; // 截断!可能变成500.499939
⚠️ 厨房翻车现场
-
精度丢失之谜 🍳
float 余额 = 0.0f; for(int i=0; i<10000; i++) { 余额 += 0.0001f; } printf("%.10f", 余额); // 输出0.9999999404(不是精确的1元!) -
比较陷阱 ⚠️
double a = 0.1 + 0.2; if(a == 0.3) { // 永远不会执行! printf("数学老师要哭了"); } -
格式符错配 📏
float 身高 = 1.75f; printf("%d", 身高); // 乱码警告!应该用%f或%lf
🧪 厨房实验(5分钟)
实验1:精度可视化
#include <stdio.h>
int main() {
float f = 0.1f;
double d = 0.1;
printf("float版0.1: %.20f\n", f); // 0.10000000149011611938
printf("double版0.1: %.20lf\n", d); // 0.10000000000000000555
return 0;
}
实验2:科学计数法
#include <stdio.h>
int main() {
long double 氢原子质量 = 1.67e-27;
printf("氢原子质量: %Le kg\n", 氢原子质量); // 输出1.670000e-27
return 0;
}
📌 本节总结
- 日常选妃:优先用
double(精度够用还不占太多内存) - 金融禁区:涉及钱💰必须用整数分(如1元=100分)
- 比较秘诀:判断差值是否小于epsilon(如
fabs(a-b) < 1e-6)
下节预告:字符类型 🎭(ASCII码的魔法世界)
630

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



