1、数据类型
分类
(1)数据类型:
基本类型:
整型:signed,unsigned
:short // int long// long long
字符型char
实型float double(数据大就用e计数法)
枚举型 enum
构造类型:
结构体struct
共用体union
指针类型
空类型 void
逻辑类型(bool) true(非0) false(stdbool.h)
1.预处理:生成.i文件(-E表示只进行预编译)
gcc -E main.c -o main.i //打开i文件可以看到头文件的位置以及头文件中的数据类型处理文件的方式,可以借此查看头文件的编译方式,尝试自己写原生头文件;
2.编译:生成.s文件
gcc -S main.i -o main.s
3.汇编:生成.o文件,即可重定位的二进制文件
gcc -C main.s -o main.i
4.链接:生成可执行的elf格式文件
gcc main.c -o main
//注意:-127的补码10000001而-128的补码(规定)10000000;
unsigned ch = -1;ch输出255(越界输出)
<limits.h>看各类型的边界值;
(2)常量constant
八进制0开头;十六进制0x开头;
整型常量;浮点常量;字符常量;A--ascll 65;a---97;差32;
linux :man ASCLL 访问ascll码表;
ascll码表中可以用字符做一些加减法得到新的数字或字符;
字符串常量(\0)"";
标识常量#define XX xx
编译器在处理宏的时候是直接替换;所以运算时是替换后再运算;
一个十六进制位最多到15,对应的二进制位为4位,也就是0.5字节;
(3)变量
字母数字下划线构成,不能数字开头,不能与c关键字冲突;
register称为寄存器类型(<=4byte),该变量是将变量放入cpu寄存器中,加快运行速度,(对于经常访问的变量);//register int a = 10;寄存器变量没有地址;
变量的存储类型:
存储类型 :
auto、
register、
static:默认0,静态储存类型,既可以在函数体内也可以在函数体外、;
static int a;默认a=0;修饰去全局变量其他文件无法使用;
extern:在函数体外说明,其他文件中的函数或程序也可以引用这个变量;
int a = 10;文件1定义a;
extern int a;文件2使用a;编译的时候要两个文件一起编译;
数据类型 变量名;
运算符:
算术运算符:+ 、-、 *、 /、 %、 ++、 --;浮点数不能取余;
关系运算符:>、>=、<、<=、==、!=;
逻辑运算符:!、&&、 ||;
位运算符:~(按位取反)、&(逻辑与)、|(逻辑或)、^(相异为真)、>>(右移)、<<(左移); (对二进制位处理);a <<3;b>>3;//移位处理;左移一位是*2的关系;
把unsugned数某一位快速置1;
把unsugned数的某位快速清0;
如何利用位运算把一个十进制数转化为一个十六进制数;
赋值运算符:
+=、-=、*=、/=、%=、|=、^=、>>=、<<=、
特殊运算符:
三目运算符
sizeof(变量名和类型都行)
逗号
c语言运算符的优先级