1.gcc 编译
工作的4个步骤
预处理—>> 编译—>> 汇编—>> 链接 就可以得到可执行文件
-
预处理:gcc -E .c源文件 -o 目标.i
-
编译:gcc -S 目标.i -o 目标.s
-
汇编:gcc -c 目标.s -o 目标.o
-
链接:gcc 目标.o -o 3
-
一步生成(编译):gcc 源文件 生成a.out
-
指定生成目标文件(编译):gcc 源文件 -o 目标文件
-
执行可执行文件:./可执行文件
2.计算机基本结构
输入设备(键盘、鼠标)、CPU、存储器、输出设备(显示屏)
- 外存:位于电脑上,例如磁盘、U盘。存CPU上暂时不使用的数据或程序。
- 内存:存放CPU需要使用的程序和数据。容量比较小。掉电时数据消失。
- 寄存器:存在于CPU中,是一个存取速度很快的寄存器,容量很小—>正在使用的程序和数据。
- 程序:就是计算机系统可以识别的一组二进制的有序指令!
3.C的发展史
程序语言的发展:
- 机器语言:对机器很友好,但是对人是不友好。 010101
- 汇编语言:机器语言符号化
- 高级语言:更接近人类自然语言,
4.关键字---->>数据类型
关键字都是小写,分类:
表示数据类型的关键字:char、double、enum、float、int、long、short、struct、union、void…
表示控制语句的关键字:break、continue、case、default、do、for、goto、if、switch、while
表示数据存储类型的关键字:auto、extern、register、static
其他关键字:const修饰符—只读、return结束函数、sizeof计算内存大小、volatile防止编译器优化
typedef:对已经存在的数据类型进行重命名
-
signed:有符号------>>数据可以有正数,也可以有负数
-
unsigned:无符号------>>只有正数
注意:内存的基本单位是字节,1字节占8个位
- 有符号数:数据可以是正数,也可以是负数。
原码、反码、补码
-
有符号数的最高字节的最高位表示符号位,0表示正数,1表示负数
-
负数:在内存中以补码的形式存储的
-
补码=反码+1
-
反码=原码取反,取反的时候符号位不变
Char类型 -1 在内存中的存储:
原码:1000 0001
反码:1111 1110
补码:1111 1111
1111 1111 就是char类型的-1在内存中存储格式。
- 无符号数:想怎么存就怎么存,没有补码、反码这一说。
各种数据类型的数据的取值范围
-
signed char:1000 0000 ~ 0111 1111 结果是-128 ~ 127------>>-2^7 ~ 2^7-1
-
unsigned char:0 ~ 1111 1111 结果是 0 ~ 255------>>0 ~ 2^8-1
-
signed int:-2^31 ~ 2^31-1
-
unsigned int:0 ~ 2^32-1
-
signed short:-2^15 ~ 2^15-1
-
unsigned short:0 ~ 2^16-1
-
signed long:-2^63 ~ 2^63-1
-
unsigned long:0 ~ 2^64-1
面试题目
问:a输出的值是多少?
255超出signed char 的最大范围
255------>>1111 1111(补码)------>>1111 1110(反码)------>>1000 0001(原码)------>>-1
浮点型数据,整数部分和小数部分,它在内存中的存储就不能和整数的存储方式一样了
- 不能用=,只能近似≈
- float:单精度 4个字节
- double:双精度 8个字节
例子:
定义一个float类型的变量a,判断他的值是否和0相等?
If(a>=-0.000001 && a<=0.000001)
5.C的数据
程序最重要的是处理数据
数据分类:数值类型数据、非数值类型数据
-
数值类型数据:可以参与算术运算
-
非数值类型数据:图片、语言、语音等
数值数据表示形式:
- 二进制:0~1 用b开头 给计算机使用 b011 满2进1
- 八进制:0~7 用0开头的 写代码用的 076 023 满8进1
- 十进制:0~9 给人看的 10 11 12 满10进1
- 十六进制:0~9 AF/af 用0x或者0X开头的 0xac 满16进1
二进制和十进制之间的转换比较困难,八进制、十六进制和二进制之间转换较容易
- 2进制、8进制、16进制转换成10进制
- 10进制转换为2进制、8进制、16进制
短除法
- 8进制、16进制和2进制之间转换
字符数据转成对应ASCII码值来表示: 单引号括起来的就是字符
数字字符‘0’~‘9’ ASCII码值:48~57
空字符‘\0’ ASCII码值: 0
大写字母字符‘A’~’Z’ASCII码值: 从65开始 依次+1即可
小写字母字符‘a’~’z’ ASCII码值: 从97开始 依次+1即可。
6.常量
- 常量:值不可以修改
- 变量:值可以修改
常量分类:
-
整型常量:各种进制数都可以表示
-
字符常量:‘a’
-
长整型常量:78L
-
无符号整型常量:78u
-
浮点型常量:1.2 2.5
-
字符串常量:“hello dog”。在内存中占几个字节?10
注意:字符串常量都是‘\0’字符结尾的,因为’\0’是字符串的结束符号。
‘\0’的ASCII码值是多少: 0
宏定义的格式:#define 名字 数值
宏还可以用来表示函数,叫宏函数!
宏函数在使用的时候只是做简单的文本替换
注意:字符串常量都是‘\0’字符结尾的,因为’\0’是字符串的结束符号。
‘\0’的ASCII码值是多少: 0
宏定义的格式:#define 名字 数值
宏还可以用来表示函数,叫宏函数!
宏函数在使用的时候只是做简单的文本替换