#include <stdio.h>
int a,ch='9';

void _1()//&的测试 
{
 	for(int j=0;j<20;j++)
	{
		printf("%d&i(i从0~19):",j);
		for(int i=0;i<20;i++){
			if(i&j) printf("%d ",i);//一般的运用有:(a&1)->等同于a%2==1(但更快)其他的用法,看运行结果探索规律吧(用八位二进制找原理) 
		}
		printf("\n");
	}
	printf("\n");
} 

void _2()//|的测试
{
  	printf("(i&6)|(i&2)(i从0~19):");
	for(int i=0;i<20;i++){
		if((i&6)|(i&2)) printf("%d ",i);//博主目前不知道该用于啥,同&一样找规律和原理 
	}
	printf("\n\n");
}

void _3()//^的测试
{
  	printf("(i&6)^(i&2)(i从0~19):");
	for(int i=0;i<20;i++){
		if((i&6)^(i&2)) printf("%d ",i);
	}
	printf("\n\n");
	printf("^(ch='5'的字符):");
	if(a=ch^'0') printf("%d ",a);//将字符型0~9转化为整数型0~9,也可以用ch^48,因为字符'0'在ASCII中对应的十进制为48 
	printf("\n\n");
}/*注:获取字符对应的ASCii直接用整型%d输出就可以了*/

void _4()//<<的测试
{
  	printf("i<<=1(i从0~19):");
	for(int i=0;i<20;i=a,i++){
		a=i;
		if(i<<=1) printf("%d ",i); //i<<=m相当于i*m,但是运行的更快 
	}
	printf("\n\n");
} 
void _5()//>>的测试
{
	printf("i>>=1(i从0~19):");
	for(int i=0;i<20;i=a,i++){
		a=i;
		if(i>>=1) printf("%d ",i); //i<<=m相当于i/m,但是运行的更快 
	}
	printf("\n\n");
}

int main() 
{
	_1();
	_2();
	_3();
	_4();
	_5();
	return 0;
 }