位运算与预处理。
二进制表示并进行上下比较后输出;
&:按位与;都为1的时候才为1
|:按位或;只要有1
异或^:相同为0,不同为1
取反~:(单目运算符只对一项进行处理1与0互换)
将数据表示成二进制形式,如果参与运算的数据是负数则以补码方式表示;
<<左移 末尾补0 高位的数据将会丢失,低位补0。
1<<3=1000左移三位 前面的0被删掉了
>>右移 (整体向左右移动)移位时,低位右移后舍弃,对于无符号数高位补0。对于有符号数,如果原来的符号位为0;(该数为正),则高位移入0,如果符号位原来为1(该数为负),则高位移入0还是1,取决于所用的计算机系统。
只要转化为 二进制就可以使用位运算
0x表示十六进制的数
二进制可表示数字0~15
交换两个数可以不引入第三个数:a=a^b;b=b^a;a=a^b;
预处理:eg:#include<stdio.h>
代码执行的前提就是预处理
ANSI C标准规定可以在C源程序中加入一些“预处理命令” ,以改进程序设计环境,提高编程效率。
这些预处理命令是由ANSI C统一规定的,但是它不是C语言本身的组成部分,不能直接对它们进行编译(因为编译程序不能识别它们)。必须在对程序进行通常的编译之前,先对程序中这些特殊的命令进行“预处理”
C提供的预处理功能主要有以下三种:
1.宏定义:#define 标识符 字符串eg:# define PI 3.1415926
2.文件包含
3.条件编译
(在本程序文件中用指定的标识符PI来代替“3.1415926”这个字符串,在编译预处理时,将程序中在该命令以后出现的所有的PI都用“3.1415926”代替。)
这个标识符(名字)称为“宏名”;在预编译时将宏名替换成字符串的过程称为“宏展开”。
#define是宏定义命令。
对程序中用双撇号括起来的字符串内的字符,即使与宏名相同,也不进行置换。
宏定义是专门用于预处理命令的一个专用名词,只作字符替换,不分配内存空间。
头文件中<stdio.h>可以改为“stdio.h”意义不变。
头文件中自己写的东西只能用“”来定义,就相当于一个函数(不能在函数内重复使用)
#include“1.c”可以进行关联使用,其内程序可以进行直接使用。
#define 第一个空格后完全遵循变量规则,第二个空格后所有的东西都进行替换;无论什么都可以被都可以进行替换;