C语言基础全套整理笔记
1.1 计算机硬件
根据冯.诺依曼体系:输入设备、输出设备、存储器、CPU(控制器 + 运算器)
cpu不能和硬盘进行数据交换,只能和内存进行数据交换。(cpu打开应用程序时会进行加载,这个速度取决于硬盘和内存的交换速度)
计算机底层只能识别二进制,所有数据都是二进制 0、1
注:64位代表cpu的地址总线数量,表示cpu可以控制的内存地址数量,与内存地址上里面的东西无关(内存地址指向的最小单位是1字节,所以相邻格子编号+1)
cpu初始架构决定cpu的数据带宽是32位还是64位,数据总线和地址总线的长度由cpu架构决定。控制总线是数据的控制方式
内存条的频率决定内存传输和接受cpu数据的速度,cpu的数据带宽决定cpu传给和接受内存的数据速度。但是它们的传输速度由两者决定,否则会产生木桶效应。
1byte(B字节)=8位(b/ bit)
1kb=1024b
1MB=1024kb
1GB=1024MB
编译工具链与语言层级关系
一、三种语言的层级关系
高级语言:更接近人类表达方式,需要通过 gcc 编译为机器可以识别的语言。
汇编语言:属于低级语言,与机器语言一一对应,但 CPU 不能直接执行。
机器语言:由 0 和 1 组成,是 CPU 唯一能够直接执行的二进制语言。
编译流程说明
正向编译链路:高级语言 → gcc 编译器 → 汇编语言 → gcc 调用 .as(外部汇编器)→ 机器语言
工具说明:
gcc:负责编译流程的整体调度,内部调用多个工具完成编译任务。
gdb:独立的调试工具(不属于 gcc 和 binutils),用于调试已编译的可执行程序,帮助定位程序崩溃和 Bug。
二、mingw-w64:Windows 平台的 GNU 工具链移植
背景说明:原生 Windows 平台无法直接运行 gcc、as、ld、gdb 等工具,需移植为 .exe 文件。这些工具在 Linux 平台为原生工具,可直接安装和运行。
安装验证:检查 mingw 路径下是否存在 gcc 和 gdb 工具,是判断 mingw-w64 是否安装成功的关键标志。
C语言中判断结果输出是0或1而不是true或false
函数与方法核心区别(C / C++ / Java)
函数:封装好的、可以重复使用的代码块。
封装在class 类中的代码块,被称为方法。
-C语言:只有函数,void代表无返回值函数
-Java:只有方法,void代表无返回值方法
-C++:两种都有,独立代码块是函数,类内是方法
二、函数四大组成部分
1. 返回值类型
函数执行完毕后,是否需要给调用者返回一个结果。
-void:不需要返回结果(无返回值)
-int / double / char:执行完毕返回对应类型的数据
2. 函数名
给代码块命名,用于后续调用函数。
3. 参数列表
外界传递给函数的数据,可选,可为空。
4. 函数体{ }
大括号内部,是函数真正执行功能的代码。
三、核心语法区分(终极识别口诀)
| 语法类型 | 核心特征 |
|---|---|
| 变量 | 有数据类型,无括号、无大括号 |
| 函数声明 | 有类型、有()、有分号;无 { } |
| 函数定义 | 在声明基础上,带有 { } 函数体 |
| 函数调用 | 无数据类型,只有函数名+() |
| 判断语句 | if 结构,不属于函数 |
| 循环语句 | while / for 结构,不属于函数 |
四、基础语法对照示例
int a; // 变量 void show(); // 函数声明 void show(){} // 函数定义 show(); // 函数调用 if(a>1){} // 判断语句(非函数) while(1){} // 循环语句(非函数) printf("hi"); // 库函数调用
五、专项练习题标准答案汇总
1.int score;👉变量2.void printMsg(){…}👉函数定义3.printMsg();👉函数调用4.if(score>60){}👉if 判断语句5.int add(int x,int y);👉函数声明6.while(1){}👉while 循环语句7.printf("hello");👉库函数调用8.double getPrice(){…}👉函数定义9.getPrice();👉函数调用10.for(…){}👉for 循环语句
原码、反码、补码知识笔记
基础概念
原码:人能看懂的语言,机器无法看懂。
反码:原码和补码的过渡项,无实质作用。
补码:机器能看懂的语言。
正数的表示方法
正数的原码、反码、补码三者完全相同。
负数的表示方法
原码:直接给出负数的二进制表示。
反码:符号位保持不变,其余数值位全部按位取反。
补码:反码 + 1。
8 位表示对照表
| 十进制 | 8 位原码 | 8 位反码 | 8 位补码 |
|---|---|---|---|
| +0 | 00000000 | 00000000 | 00000000 |
| −0 | 10000000 | 11111111 | 00000000 |
| +127 | 01111111 | 01111111 | 01111111 |
| −127 | 11111111 | 10000000 | 10000001 |
| −128 | 不存在 | 不存在 | 10000000 |
补码计算注意事项
补码在计算时,如果反码全是 1,补码进位丢弃后全变成 0。
例如:−0 的补码为 00000000
特殊值 -128 无法使用「原码→反码→补码」的常规公式推导,是 8 位补码独有的编码。
补码加减法 & 溢出判断(面试必考)
减法等价于两数的补码相加:【A】补 + 【B】补
二进制直接相加,超过 8 位的进位直接舍弃。
溢出:结果超出取值区间 [-128, 127],运算结果错误。
溢出判断规则:只有两个正数相加或两个负数相加才会溢出;一正一负相加永远不会溢出。
总结
正数:原码 = 反码 = 补码
负数需要分步求出原码、反码、补码
计算机底层运算统一使用补码完成加减运算
运算需要额外判断溢出,溢出时结果无效
例 2:-8-2 = (-8)+(-2)
[-8]{补} = 1111 1000 [-2]{补} = 1111,1110
1111 1000 + 1111 1110 =1 1111 0110
丢弃进位,结果补码 11110110 → -10 ✔️
开发一套软件所需工种与项目流程
一、项目对应工种
1. 项目经理:挂职岗位,一般不参与实际开发工作
2. 产品经理:管理岗位,薪资较高,需良好沟通能力
2.1 和客户对接需求
2.2 和技术总监开会评估:开发周期、所需人员、项目成本、项目报价
2.3 撰写项目需求文档
2.4 召开团队会议,分配开发模块
2.5 安排测试人员检测、修复项目Bug
2.6 安排UI人员进行项目界面设计
2.7 督促开发进度,整体把控项目节奏
2.8 随时和老板同步项目进度
3. UI设计人员:负责项目界面设计工作
4. 开发工程师(程序员):根据分配的模块,独立完成对应功能开发
二、开发日常工作状态
1. 每日早会:明确当天开发目标、待完成功能
2. 工作时段:自主开发,时间相对自由
3. 下班前:统一提交代码,召开简短工作总结会
三、软件整体上线流程
1. 开发完成后,由测试人员全方位测试项目功能
2. 测试无问题后,由技术总监整合全部代码,完成项目上线(上线阶段工作量最大、压力最高)
3. 项目试运行1-2周,无BUG、无故障则正式上线
4. 项目正式落地后,由产品经理对接客户,收尾尾款对接工作