符号:
1. 连接符 与 转义符
1)C语言中反斜杠 \ 表示断行,编辑器将\后面的自动连接到前一行;
注意: \后面不能有空格,\的下一行之前也不能有空格
2)反斜杠 \作为转义字符开始标志
\n 回车换行 \t 横向跳到下一制表位置
\v 竖向跳格 \b 退格
\r 回车 \f 走纸换页
\\ 反斜扛符"\" \' 单引号符
错误的转义字符是( A )
A.'\091' B.'\\' C.'\0' 空字符 D.'\'‘
\0是八进制数转换符,所以不可能出现大于等于8的数;(\x十六进制)
2. 位运算符号
& 按位与 | 按位或
^ 按位异或 ~ 取反
<< 左移 >> 右移
除了取反是单目运算(只需要一个操作数),其他是双目运算(需要两个操作数):
C中唯一的一个三目运算:?,
左移:高位丢弃,低位补0
右移(符号位随着一起移动):
正数,高位补0,负数,高位一般补1(由各个编辑器决定)
左右移动的数值不能大于数据的长度,不能小于0
举例:
0x01<<2+3;输出:32 优先级:+ 在<<之前
C语言中的优先级:
括号成员第一; //括号运算符[]() 成员运算符. ->
全体单目第二; //所有的单目运算符比如++ -- +(正) -(负) 指针运算*&
乘除余三,加减四; //这个"余"是指取余运算即%
移位五,关系六; //移位运算符:<< >> ,关系:> < >= <= 等
等于(与)不等排第七; //即== !=
位与异或和位或; //这几个都是位运算: 位与(&)异或(^)位或(|)"三分天下"八九十;
逻辑或跟与; //逻辑运算符:|| 和 &&十二和十一注意顺序:优先级(||) 低于 优先级(&&)条件高于赋值, //
逗号运算级最低! //逗号运算符优先级最低
! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
注:三目运算“?:”问号后面的两个操作数必须是同一种数据类型;
预处理:
1)宏定义:
#define X 3
#define Y X*2
#undef X
#define X 2
int main()
{
int z=Y;
printf("%d",z);
return 0;
}
宏的生命周期从#define开始到#undef结束;
2)文件包含:
#include <filename>:预处理到系统规定的路径中去获得这个文件
#include “filename”: 预处理应在当前目录中查找文件名为filename 的文件,若没有找到,则按系统指定的路径信息,搜索其他目录。
3)#line 预处理:
#line 的作用是改变当前行数和文件名称;
#line 30 a.h
其中,文件名a.h可以不写,这条预处理指令就可以改变当前的行号为30,文件名是a.h。
4)#pragma 预处理:
@#pragma pack 改变编译器的默认内存对齐方式
@#pragmamessage(“消息文本”)
当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。
@#pragma once(比较常用)
只要在头文件的最开始加入这条指令就能够保证头文件被编译一次
@#pragmahdrstop
预编译头文件到此为止,后面的头文件不进行预编译,使用这个选项排除一些头文件。
@用#pragmastartup 指定编译优先级
@#pragmapackage(smart_init) ,根据优先级的大小先后编译。
5)#运算符
#defineSQR(x) printf("The square of x is %d.\n", ((x)*(x)));
SQR(8); The square of x is 64.
#defineSQR(x) printf("The square of "#x" is %d.\n", ((x)*(x)));
The square of8 is 64.
6)##预算符:这个运算符把两个语言符号组合成单个语言符号。
#define XNAME(n) x ## n
如果这样使用宏: XNAME(8)
则会被展开成这样: x8