C 语言学习笔记四

程序入门设计 — C 语言

第二周 核心语法

📝2.4 C 语言笔记 | 计算机存储规则

(隔壁老王也能秒懂!)

存储 = 电脑的"记忆仓库"🧠
  • 核心逻辑:电脑把所有东西(照片、文档、游戏进度)都翻译成0和1,存在各种"仓库"里
  • 比喻:内存像书桌(临时放正在用的书),硬盘像书柜(长期存书)
🔥 基础概念三件套
概念通俗解释生活类比
位(Bit)0或1灯泡开关(开=1,关=0)
字节(Byte)8个 Bit 组成一个汉字(比如"你")
文件多个字节的集合一本漫画书
🌍 常见存储设备
  1. 内存条(RAM)

    (书桌)

    • 特点:速度快,但关电脑就清空
    • 场景:打游戏时加载的地图数据
  2. 硬盘

    (书柜)

    • 机械硬盘(HDD):用磁盘转圈存数据(像老式唱片机)
    • 固态硬盘(SSD):用芯片存数据(像U盘)
  3. U盘/移动硬盘

    (背包)

    • 随身携带文件的"移动书包"
⚠️ 萌新必知常识
  1. 文件大小
    • 1张照片≈2-5MB(能存200-500本书)
    • 1部电影≈1-2GB(能装满整个书柜)
  2. 存储速度对比
    • 内存 > SSD > HDD(就像书包取书比书柜快)
  3. 数据安全
    • 重要文件要存2份(就像存折放家里和银行)
🧪 简单实验

实验1:看文件大小

  1. 右键点桌面文件 → 属性
  2. 看"大小"栏(显示多少KB/MB/GB)

实验2:感受速度差异

  1. 打开一个大型游戏(加载慢)
  2. 关闭后重新打开(第二次加载快很多,因为存在内存里)
📌 核心总结
  • 0和1统治世界:所有数据都是二进制
  • 单位要分清:1GB=1024MB,买硬盘要看实际容量
  • 内存≠硬盘:内存快但临时,硬盘慢但永久

下节预告:常见的进制 🚀

📝2.5 C 语言笔记 | 常见的进制

(隔壁老王也能秒懂!)

进制 = 数字的"方言"🗣️
  • 核心逻辑:计算机只认0/1,但人类发明了更懒的数字写法
  • 比喻:就像用"666"表示"牛",进制是数字的"缩写密码"
🔥 四大常见进制
进制基数符号长啥样宿舍场景
二进制20/1宿舍灯开关(开=1,关=0)
八进制80-7宿舍楼号(1号楼=01)
十进制100-9食堂饭卡余额
十六进制160-9+A-F王者皮肤颜色代码(#FF0000)
🌍 各进制"生存环境"
  1. 二进制

    (计算机DNA)

    • 场景:CPU算题、内存存数据、网络传文件
    • 例子:0b1010 = 10(宿舍号10写成二进制)
  2. 十六进制

    (程序员最爱)

    • 场景:调游戏参数、改网页颜色、看内存地址
    • 例子:0xFF = 255(王者皮肤代码)
  3. 八进制

    (古董级选手)

    • 场景:Linux系统权限(chmod 755
    • 例子:0777 = 全权限(慎用!)
  4. 十进制

    (人类日常)

    • 场景:考试分数、食堂消费、体重数字
    • 例子:100分 = 满绩点(计算机里存成0b01100100
⚠️ 进制转换避坑指南
  1. 二进制↔十六进制

    🔄

    • 懒人技巧:4位二进制=1位十六进制
    • 例子:0b1101_10100xDA(直接拼字母)
  2. 十进制转二进制

    🔢

    • 懒人技巧:不断÷2取余数
    • 例子:13 ÷2=6余1 → 6÷2=3余0 → 3÷2=1余1 → 1÷2=0余1 → 倒过来是1101
🧪 宿舍实验(5分钟)

实验1:灯开关猜数字

  1. 宿舍灯开关状态:开=1,关=0
  2. 连续按5次开关,记录二进制序列
  3. 翻译成十进制(比如10101=21)

实验2:外卖颜色代码

  1. 打开美团,找个外卖店
  2. 看商家头图颜色代码(比如#FF5733
  3. 拆解成红/绿/蓝分量(红=FF,绿=57,蓝=33)
📌 宿舍夜谈总结
  • 二进制优先:计算机底层都是0/1
  • 十六进制必备:调游戏参数/改网页必备
  • 十进制友好:输入输出默认用十进制

下节预告:整数类型 🚀

📝2.6 C 语言笔记 | 整数类型

(隔壁老王看了都说行!)

整数类型 = 给内存"定规矩"📏
  • 核心逻辑:告诉电脑这块内存要存多大的整数(就像给抽屉贴标签)
  • 比喻:用不同大小的杯子装水——水杯越大,装的水越多
🔥 四大整数类型
类型代码示例通俗解释宿舍类比大小(通常)范围(32位系统)
charchar 楼层=3;存小整数(宿舍楼层/ASCII码)小盒子(放钥匙)1字节-128~127
shortshort 教室=105;存中等整数(教室号)中号抽屉2字节-32768~32767
intint 饭卡余额=500;存常用整数(饭卡/年龄)大号抽屉4字节-2147483648~2147483647
long longlong long 学号=20200001;存超大整数(学号)超大行李箱8字节-9e18~9e18
🌍 整数类型的"超能力"
  1. 内存规划师

    🏠

    • char:用1个抽屉格子存楼层
    • long long:用8个格子存学号
    • 后果:用char存饭卡余额(>127元)→ 数值溢出!
  2. 值范围警察

    👮

    • unsigned int:0~4294967295(非负数,如人数统计)
    • 爆雷现场unsigned char 温度=-5 → 实际变成251(因为无符号)
  3. 类型转换刺客

    🗡️

    int 大数 = 30000;
    short 小数 = 大数; // 截断!小数变成-31072(32767是short最大值)
    
⚠️ 萌新必踩坑
  1. 整数溢出🎣

    char 楼层 = 130; // 超出char范围(-128~127)
    printf("%d", 楼层); // 输出-126(溢出回绕)
    
  2. 符号陷阱🕳️

    unsigned int 倒计时 = 0;
    倒计时--; // 变成4294967295(无符号数不会变负数!)
    
  3. 隐式转换🎭

    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 语言小数类型入门笔记(厨房版)

(隔壁老王看了都说香!)

小数类型 = 给数字"称重量"⚖️
  • 核心逻辑:告诉电脑这块内存要存多精确的小数(就像给量杯贴刻度)
  • 比喻:用不同精度的厨房工具处理食材——量杯越精细,称量越准
🍳 三大量具家族
类型代码示例通俗解释厨房类比大小(通常)有效数字
floatfloat 糖量=3.14f;单精度浮点数量杯(粗略量)4字节6-7位
doubledouble 菜价=9.98;双精度浮点数(默认)电子秤(精确)8字节15-16位
long doublelong double 药剂=0.001L;扩展精度浮点数实验室天平12-16字节18-19位
🔥 小数类型的"超能力"
  1. 精度魔术师 🧙

    double 披萨直径 = 12.5;    // 精确到毫米级
    float 蛋糕重量 = 0.25f;    // 只能精确到克级
    

    后果:用float存银行利息→ 0.1+0.2可能不等于0.3!

  2. 科学计数法大师 🔬

    double 光速 = 3e8;         // 3×10^8 米/秒
    long double 原子质量 = 1.67e-27; // 超级小的数
    
  3. 隐式转换刺客 🗡️

    double 大杯奶茶 = 500.5;
    float 小杯奶茶 = 大杯奶茶; // 截断!可能变成500.499939
    
⚠️ 厨房翻车现场
  1. 精度丢失之谜 🍳

    float 余额 = 0.0f;
    for(int i=0; i<10000; i++) {
        余额 += 0.0001f;
    }
    printf("%.10f", 余额); // 输出0.9999999404(不是精确的1元!)
    
  2. 比较陷阱 ⚠️

    double a = 0.1 + 0.2;
    if(a == 0.3) { // 永远不会执行!
        printf("数学老师要哭了");
    }
    
  3. 格式符错配 📏

    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码的魔法世界)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路过的一个普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值