语言的发展历史:
1、机器语言:计算机能直接识别的语言(0/1组成的代码)
缺点:难以编写与检查错误
优点:机器可以直接识别
2、汇编:由特定助记符来替代二进制指令
mov、#32...
3、高级语言:用自然语言与机器沟通
C、C++、JAVA、C#、OC、易语言...
各类语言
计算机的语言:机器语言(计算机只能识别此语言)
编译器:高级语言与机器之间的语言翻译专家。
gcc/g++是一款很优秀编译器
1、将高级语言(C语言)翻译成为目标程序
gcc 源文件 -o 可执行文件名
-o output生成可执行文件名
gcc 源文件 注:默认生成a.out
2、编译过程:(*) 动态库 静态库
(1)、预编译:替换头文件,宏指令 (检查语法错误,替换头文件,宏指令)
#include<stdio.h> // /usr/include/stdio.h
gcc -E 源文件 -o *.i
(2)、汇编:将高级翻译成为汇编指令
gcc -S 源文件.i -o .s
(3)、翻译:将非二机制语言翻译成为机器可以识别的语言()
gcc -c 源文件 -o *.o (将此源文件翻译成为二进制)
(4)、链接:(凡是引用了外部函数,必须将外部函数的库文件链接在一起)
gcc 目标文件 -o 可执行文件
makefile
makefile是一个文本文件(没有多种类型),该文件中包含自动化的编译规则(windows下编程没有makefie,都是IDE已经为你做了这个工作)
目标:依赖文件
<tab>command;
目标:
shell命令
定义变量:
变量名=字符串
引用变量:
$(变量名)
make:执行makefile文件、自动化编译(make命令时,shell会查找本地的makefile文件)
1、在执行make的命令时,一当发现某个目标的依赖文件修改时间没改变时,不会执行此命令。
2、make 目标名 执行该目标命令
运行程序:
路径/可执行文件名
C语言
C语言是一门强类型(数据类型之分)面向过程的语言
注:是以模块(函数(过程))单位,执行的单位
计算机的基础
存储单位:
1、最小的存储单位: bit (存放一个0或者1)
2、基本存储单位:Byte 字节 (1Byte=8bit)
3、其他的存储单位:
1Kb=1024Byte=2^10Byte
1Mb=1024Kb
1Gb=1024Mb
1Tb=1024Gb
原码、反码、补码:
原码:(二进制原码):
-10 10001010
-1 -》 10000001 10000000 0000001
反码:将原码取反(符号位是不变量)
-10 -》 11110101
-1 -》 11111110 11111111 1111110
补码:在反码基础上+1
-10 -》 11110110
-1 -》 11111111 11111111 1111111 = -32767(short)
C语言的数据
1、源文件:存放高级语言的文件
后缀名: .c
2、程序的入口函数:程序开始的地方(主函数)
以类型划分:整型,浮点型,字符型
按数据是否可变:常量,变量
1、常量: 不可改变的量
(1)、整型常量 :
十进制: 100 [1-9]..[0-9][0-9]
八进制: 0100 0[0-7]...[0-7]
十六进制:0x100 0x[0-9,a,...f]
八进制转换为十进制: ...8^1*值+8^0*值
十六进制转换为十进制:...16^1*值+16^0*值
(2)、字符型常量:
(3)、浮点型常量:
2、变量:可以改变的量
1、定义变量:申请空间
[有无符号] 类型 变量名;
(1)整型变量:short int long
short a
short存储范围:
有符号:[-32768,32767]
无符号:[0,65535]
整型的存储方式:(物理方式,存放在存储区的)
1、正整数是以原码形式存放的(二进制原形)(8位数据)
10 =00001010
2、负整数是以补码形式存放
注:取出应用时,必须转换为原码 -1
(2)有无符号:
符号:signed 类型 变量名;
无符号:unsigned 类型 变量名;
注:默认定义是有符号的
(3)字符型:
常量: 'a' 'b' ';' 为了与变量名进行区分
转义字符: '\n'换行 '\t' tab '\r'抬头 '\'' '字符 '\\' \
注:注意如下字符区别
空字符 : '\0' --->0
空格字符: ' ' ---->32
变量:
定义变量:
字符 变量名;
ASCII:由于计算机只能识别二进制,所以每一个字符都有一个特定的数字对应
man ascii查看ASCI码
(4)、浮点型:
常量:
3.14 3e4
变量:单精度float 双精度double
2、初始化:在定义变量同时赋初值
3、引用内容:通过名字引用变量的内容
注:1、在同一函数中不能出现同名现象
2、在引用前,必须先定义。
运算符
为用户提供运算
*运算符表达式:
0、变量达表式:
int a=1;
a;
表达式结果:整型值(4Byte) 浮点型(double)
1、空间长度: sizeof
求空间长度表达式 sizeof 空间名 求空间长度表达式结果:类型长度
2、赋值运算符: 左值=右值 结果:右值 注:将左表达式的值赋值给左值(左值必须是变量)
3、算术运算符:+ - * / %
结果:算术结果
4、判定运算符: > >= <= < != ==
结果: 真1 假0
5、逻辑运算符: 与&& 或|| 非!
表达式1 && 表达式2 结果: 一假则假
表达式1 || 表达式2 结果: 一真则真
!表达式 结果: 取反
注:逻辑 非0为真 0为假
6、自增/自减运算符:++ --
前自增/减: ++i --i (i)先自增,(结果)再取(i)值,
后自增/减: i++ i-- (结果)先取(i)值,(i)再自增
7、三目运算符:
表达式1?表达式2:表达式3
结果:表达式1为真(非0),结果为表达式2,否则为表达式3
8、* &
9、()优先级运算符 :
(1+2)*3
10、位运算符:
按位与& :相同取,否则取0
i 10 1010
j 8 1000
&-------------
1000
接位或|
i 10 1010
j 8 1000
|-------------
1010
按位取反~
i=10 1010
j=8 1000
^-------------
0010
按位异或 ^
右移>>
左移<<