1.c编译过程
1.源文件.c gcc -E a.c -o a.i 预处理(1.展开头文件 2.删除注释 3.条件编译 4.宏定义的展开) ------>> 2.源文件.i
2.源文件.i gcc -S a.i -o a.s 编译(1.检查语法 2.将c语言转换为汇编语言) ------>> 3.源文件.s
3.源文件.s gcc -C a.s -o a.o 汇编(将汇编语言转换为二进制机器语言) ------>> 4.二进制.o
4.二进制.o gcc a.o -o a.exe 链接(连接不同操作系统下的库文件) ------>> 5.可执行文件
一步编译: gcc -o a.exe a.c
2.进制转换
1. 10进制与其他进制的转换
10进制 转换为 任何进制 : 转换为N进制 就除以 N ,取余数 ,将余数倒序排列几位 N 进制数据 (除数取余法)
N进制 转换为 10进制 : 从第一位开始 数值* N ^ 0 幂数从零开始增大 然后全部相加 结果为 十进制数 (权值相加法)
2.二进制与其他进制转换
使用 8 4 2 1 原理: 八进制 (三位一个) 十六进制 (四位一个) 列如 101 010 就是 4+1 = 5 +2 = 7(八进制)
3.十六进制与八进制转换 利用二进制转换
3.原码 , 反码 , 补码
1.一个有符号的整型数据可以分为两部分一部分是符号位、一部分是数字位
2. signed int a= 1986(有符号标识 signed可以不用写) unsigned int a= 1986(有符号标识 signed可以不用写)
3.列如二进制:11111000010
1986原码: 0000 0000 0000 0000 0000 0111 1100 0010 32位
-1986原码:1000 0000 0000 0000 0000 0111 1100 0010 第一位代表符号位 1为负数
1986反码: 0000 0000 0000 0000 0000 0111 1100 0010
-1986反码:1111 1111 1111 1111 1111 1000 0011 1101 负数反码为整数的反码的 1变0 0变1
1986补码: 0000 0000 0000 0000 0000 0111 1100 0010
-1986补码:1111 1111 1111 1111 1111 1000 0011 1110 负数补码为整数的补码的+1
1 0000 0000 0000 0000 0000 0000 0000 0000 相加为33位,溢出舍弃一位,所以还是0
溢出:在数据进行操作的时候会导致超出数据类型大小,会向前位进1,多于原始数据类型大小,会被系统自动舍弃 保留从后面开始数据类型大小的位数