概述
语言的发展历史:
1、计器语言:计算机能直接识别的语言(0/1组成的代码)
缺点:难以编写与检查错误
优点:计器可以直接识别
2、汇编:由特定助记符来替代二进制指令
mov
#32
3、高级语言:用自然语言与机器沟通
C、C++、JAVA、C#、OC、易语言
计算机的语言:机器语言(计算机只能识别此语言)
编译
1.编译器:高级语言与机器之间的语言翻译专家。
**gcc/g++**是一款很优秀编译器。
1.将高级语言(C语言)翻译为目标程序
**gcc 源文件 -o 可执行文件名**
-o :output 生成可执行文件名
gcc 源文件 默认生成a.out
2.编译过程:
- 预编译:替换头文件,宏指令
#include<stdio.h> /usr/include/stdio.h
gcc -E 源文件.c -o *.i
2.汇编:将高级语言翻译成为汇编指令
gcc -S 源文件.i -o *.s
3.翻译:将二进制语言翻译成为机器可以识别的语言
gcc -c 源文件.s -o *.o
4.链接:凡是引用了外部函数,必须将外部函数的库文件链接在一起
gcc 源文件.o -o *
3.makefile
makefile:是一个文本文件,该文件中包含自动化的编译规则
目标:依赖文件
<tab>command;
目标:
shell命令
定义变量:
变量名=字符串
引用变量:
$(变量名)
make:执行makefile文件、自动化编译(make命令时,shell会查找本地的makefile文件)
1、在执行make的命令时,一当发现某个目标的依赖文件修改时间没改变时,不会执行此命令。
2、make 目标名 执行该目标命令
运行程序:
路径/可执行文件名
lzr:lzr.o
gcc lzr.o -o lzr
lzr.o:lzr.s
gcc -c lzr.s -o lzr.o
lzr.s:lzr.i
gcc -S lzr.i -o lzr.s
lzr.i:lzr.c
gcc -E lzr.c -o lzr.i
clearn:
rm lzr.o lzr.s lzr.i
C语言
C语言:是一门强类型(数据类型之分)面向过程的语言
注:是以模块(函数(过程))单位,执行的单位
程序=算法+数据
C语言的数据:
1、源文件:存放高级语言的文件
后缀名: .c
2、程序的入口函数:程序开始的地方(主函数)
以类型划分:整型,浮点型,字符型
按数据是否可变:常量,变量
常量: 不可改变的量
整型常量 :
十进制: 100 [1-9]…[0-9][0-9]
八进制: 0100 0[0-7]…[0-7]
十六进制:0x100 0x[0-9,a,…f]
八进制转换为十进制: …81*值+80值
十六进制转换为十进制:…161*值+160值
变量:可以改变的量 (大小由变量的容器决定)
**定义变量:申请空间的大小**
[有无符号] 类型 变量名;
eg:signed short b
整形变量:(申请一块存储空间) 专门存放整型数据的“空间”
类型 变量名;
注:C语言的整型类型有 基本整型
按类型分:
int,短整型short,长整型long
eg:定义一个基本整型变量a:
int a;
不可出现同名定义在同一“函数”中
按有无符号: +100 -100
有符号:signed
注:如果定义变量时,没有指定有无符号时。默认是有符号位
int a;等价于 signed int a;
无符号:unsigned
初始化:在定义变量同时赋初值
short b=10;
引用变量:就是引用该变量的“内容”
输入输出:
printf("%d",数据); %d将二进制转换为十进制输出
运算符:
求空间大小的运算符:sizeof
计算机的基础:
1、存储单位:
1、最小的存储单位: bit (存放一个0或者1)
2、基本存储单位:Byte 字节 (1Byte=8bit)
1Byte=8bit)
3、其他的存储单位:
1Kb=1024Byte=2^10Byte
1Mb=1024Kb
1Gb=1024Mb
1Tb=1024Gb
short 的存储范围
最大值:0111111111111111 =2^15 -1=32767
最小值:1000000000000000,求补码,符号位不变,其余位取反,然后加1,=-2^16=-32768
正数的符号为0,负数的符号位为1