gcc编译过程
在Linux中,C程序的编译总过程
gcc -E test.c -o test.i //预处理阶段,生成编译文件
gcc -S test.i -o test.s //编译阶段,生成汇编代码文件
gcc -C test.s -o test.o //汇编阶段,生成链接文件
gcc test.o -o test //链接阶段, 生成可执行文件
可以合起来,一句代码
gcc test.c -o test //直接生成可执行文件test
./test //执行可执行文件
或者:
gcc test.c //默认结果为a.out
./a.out //执行可执行文件
数据类型
整数:
int // 4字节 在内存中占32位 所以大小为 -2^31到2^31-1
short // 2字节
long // 8字节
浮点数:
float //4字节
double //8字节
字符:
char //1字节
~~~~~~~~~
番外:
int的范围为 -128 ~ 127
最小值为10000000 //-128 补码中,最高位的符号位不一定是绝对的了,可能会因为加一而导致符号位进位
最大值为01111111 //+127
最大值加1 =最小值
// 127 +1 = -128
~~~~~~~~~~
番外:
计算机中的数据都是以补码存储的
好处:1,统一了正零和负零
正零:0000 0000 的补码为0000 0000
负零:1000 0000 的补码为0000 0000
2,会将减法用加法表示
例如: 9-6
9
原码; 0000 1001
反码: 0000 1001
补码: 0000 1001
-6
原码; 1000 0110
反码: 1111 1001
补码: 1111 1010
加法:
补码: 0000 1001
补码: 1111 1010
\ = 0000 0011 //为+3
用补码表示会有bug,
在存贮无符号数或者八进制,十六进制时,最高位被1占有时,存储时以正数存入,取出时会以补码转为原码输出,导致错误,如下:
类型转换
根据上面的数据类型大小,
小转大直接转
如:
int num = char c ; //1字节转换为4字节
大转小时,使用强制转换
如:
char n = 'c' ;
char c = (int)n; //使用 (int) 强制类型转换
占位符
%d 整数
%f float浮点型
%lf double浮点型
%s 字符串
%c 单个字符
%p 地址类型,指针的值
%3d 整数 宽度为3位 ,前边宽度不够时,用空格补齐
%03d 整数 宽度为3位 ,前边宽度不够时,用0补齐
%.2f 字符类型 小数点后保留两位
%u 十进制 无符号整数
%x 十六进制的整数
%o 八进制的整数
转义字符
转义字符:
\n ==换行
\t==tab,空格
\r==回到行首符号
\\==\
\'=='
\''=="
\a==发出警报
\0==字符串结尾符