-
宏定义定义的计算,只是字符串,计算要等到函数调用时执行,所以定义时注意加(),保证优先级。
宏定义的函数没有数据类型的限制。
查看全部 -
宏#define 标识符 字符串(无;)
宏不遵循C的语法,仅是字符串的替换。
用法:
定义常量和数组buffer
传递参数,相当于函数功能。
查看全部 -
编译包括4个步骤:预处理(i)、编译()、汇编()、链接()。
预处理:
.c和.i文件都是C的语法。.i展开了头文件同时进行宏替换(宏定义)。
查看全部 -
struct weapon{ char name[20]; int atk; int price; } struct weapon weapin_2[2] = {{"weapon_name1",50,100},{"weapon_name2",100,200}}; 结构体数初始化赋值都要一一对齐。查看全部 -
变量先申明后定义,定义和申明可以放在一起,可以分离。
查看全部 -
结构体声明与定义:
struct weapon{
char name[20];
int atk;
int price;
}weapon_1;
结构体初始化:
struct weapon weapon_1 = {"weapon_name",100,200 };
结构体变量访问使用”.“运算符,该运算符具有最高的优先级。
查看全部 -
typedef VS define:
①预处理时define定义的宏会替换,但typedef定义的别名不会替换。
②作用域不同
③通常用于给自定义数据类型其别名
size_t : unsigned long的别名
查看全部 -
预处理阶段工作:①将头文件展开直接放置到源文件中
②宏替换
③条件编译
注意:宏替换只是简单得字符串替换,且可以传递参数。
例如,#define N(n) n*10
int b = N(a); // 首先n替换成a,然后a*10。
易错:#define ADD(a,b) a+b
int c = ADD(a,b) * ADD(a,b);
/* 经过简单的替换会得到a+b*a+b,这显示不是我们想要的结果,因此加上括号保证优先级不会出错。*/
#define ADD(a,b) (a+b)
查看全部 -
宏只是字符串的替换,不考虑语法规则查看全部
-
000000000000000000002.3
查看全部 -
int func(int n)//求阶乘
{
int r;
if(n<0)printf("data error");
else if(n==0||n==1)r=1;
else r=n*func(n-1);
return r;
}
n>31结果不准确
查看全部 -
<<左移若干位
>>右移若干位
int a=3;//00000011
a<<4=00110000=48,高四位被舍弃
左移n位 a*2^n,符号位溢出
右移n位 a/2^n,根据符号位决定左边补0还是1
查看全部 -
按位异或:不相同的时候为1,相同为0
定位反转:a=a^0xFF,00001001->11110110
数值交换:a=a^b;b=b^a;a=a^b;
查看全部 -
按位或,有一个为1则为1
设定数据的指定位置:a|0xFF设置低8位为1
查看全部 -
位 0 false 1 true
&按位与,整型或字符型,补码
a=4;00000000000000000000000000000100
b=7;00000000000000000000000000000111
a&b=00000000000000000000000000000100=4
迅速清零a&0=0
保留指定位置a&1=a
判断奇偶性
|按位或
^按位异或
~按位取反
<<左移
>>右移
查看全部
举报