C语言简单知识点总结
gcc编译过程
预处理:gcc -E hello.c -o hello.i
预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法
编 译:gcc -S hello.i -o hello.s
编译:检查语法,将预处理后文件编译生成汇编文件
汇 编:gcc -c hello.s -o hello.o
汇编:将汇编文件生成目标文件(二进制文件)
链 接:gcc hello.o -o hello_elf
链接:C语言写的程序是需要依赖各种库的,所以编之后还需要把库链接到最终的可执行程序中去
原码
一个数的原码(原始的二进制码)有如下特点:
l 最高位做为符号位,0表示正,为1表示负
l 其它数值部分就是数值本身绝对值的二进制数
l 负数的原码是在其绝对值的基础上,最高位变为1
十进制数 |
原码 |
+15 |
0000 1111 |
-15 |
1000 1111 |
+0 |
0000 0000 |
-0 |
1000 0000 |
反码
l 对于正数,反码与原码相同
l 对于负数,符号位不变,其它部分取反(1变0,0变1)
十进制数 |
反码 |
+15 |
0000 1111 |
-15 |
1111 0000 |
+0 |
0000 0000 |
-0 |
1111 1111 |
补码
在计算机系统中,数值一律用补码来存储。
补码特点:
l 对于正数,原码、反码、补码相同
l 对于负数,其补码为它的反码加1
l 补码符号位不动,其他位求反,最后整个数加1,得到原码
十进制数 |
补码 |
+15 |
0000 1111 |
-15 |
1111 0001 |
+0 |
0000 0000 |
-0 |
0000 0000 |
在计算机系统中,数值一律用补码来存储,主要原因是:
l 统一了零的编码
l 将符号位和其它位统一处理
l 将减法运算转变为加法运算
l 两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃
有符号和无符号整型取值范围
数据类型 |
占用空间 |
取值范围 |
short |
2字节 |
-32768 到 32767 (-215 ~ 215-1) |
int |
4字节 |
-2147483648 到 2147483647 (-231 ~ 231-1) |
long |
4字节 |
-2147483648 到 2147483647 (-231 ~ 231-1) |
unsigned short |
2字节 |
0 到 65535 (0 ~ 216-1) |
unsigned int |
4字节 |
0 到 4294967295 (0 ~ 232-1) |
unsigned long |
4字节 |
0 到 4294967295 (0 ~ 232-1) |
运算符优先级