一、编译
test1.c
gcc test1.c -- 默认生成a.out可执行文件
gcc teset1.c -o test1
编译的四个阶段:
1.预处理 -- 展开头文件/宏替换/去掉注释/条件编译
生成预处理文件:gcc -E test1.c test1.i
#include
#define
#if -- 如果if后面是true ,则编译if 和 endif之间的代码
#else -- 建立另一个选择
#elif -- 与else if相同
#endif -- 标识一个#if模块的结束
宏的优点:
1、代码复用率高
2、提高性能
缺点:
1、不可调试
2、无类型安全检查
3、可读性差,容易出错
#define ((x)+(y)) 200
x+y*20 => 200 * 20
2.编译:检查语法,生成汇编
生成汇编:gcc -S testt1.c test1.s
3.汇编: 汇编代码转换成机器码
gcc -c test1.c -o test1.o
4.链接: 将所有.o文件链接在一起生成可执行文件 a.out
动态链接库
静态链接库
二、计算机组成
输入设备:向计算机输入数据和信息的设备
输出设备:是人与计算机交互的一个部件,用于数据输出
存储器:是计算机的记忆设备,用于存放数据和程序
控制器:是计算机的指挥中心,负责决定执行程序的顺序
运算器:计算机中执行各种算数和逻辑运算的部件
三、机器语言 -- 二进制
每一位只有 0 1
四、数值数据
十进制 -- 每一位可以取 0 - 9
满十进一
二进制:每一位只能取0 1(前面加0b)
满二进一
十进制 换算成 二进制:
1、除方法
2、凑方法
123 = 64 + 32 + 16 + 8 + 2 + 1
2^6 + 2^5 + 2^4 + 2^3 + 2^1 + 2^0
二进制换算成 十进制
10111 1010 = 1 * 2^8 + 1* 2^6 + 1* 2^5 + 1* 2^4 + 1* 2^3 + + 1* 2^1
八进制 ... 每一位只能取 0~7(前面加0)
满八进一
十进制 换算成 八进制
378 -> 0576
八进制 换算成 十进制
0576 = 5 * 8^2 + 7 * 8^1 + 2 * 8^0
二进制 换算成 八进制 (三位换一位)
10111 1010 =》 0572 (三位三位的看101 111 010分别对应5 7 2)
八进制 换算成 二进制 (一位换三位)
07474 => 111 100 111 100
十六进制(前面加0x)-- 每一位可以取到0-9、a-f
满十六进一
十进制 换算成 十六进制
十六进制 换算成 十进制
二进制 换算成 十六进制 (四位换一位)
1111 0011 1100 = 0xf3c
十六进制 换算成 二进制 (一位换四位)
0xabcd07 = 1010 1011 1100 1101 0000 0111
五、非数值数据 -- C语言中 字符用' '括起来,字符串用" "括起来
ASCII码:字符表256个
第一部分: 32个
一段用于通讯或控制、有一些字符可以显示在屏幕上,有一些没法显示
能够看到效果
第二部分:96个
阿拉伯数字、英文大小写、底线、括号等符号
全部都可以显示在屏幕上