跑骚时刻 - C笔记:位运算符和逻辑运算符

     /*
	2014年5月21日 10:01:09		位运算符和逻辑运算符
	*/

	int i = 5, k = 21;
	// 位运算符:&	按位于
	printf("%d\n", i&k);//5,分别把这个两个数的二进制对比。只有同位两个数都是1,那么该位就为1,否则为0;例如:1&0=0,0&1=0,1&1=1,0&0=0
	// 逻辑运算符:&&	逻辑与(并且)
	printf("%d\n", i&&k);//1,如果i和k都不为0;那么就返回1;如果i和k其中有一个数为0,那么就返回0

	// 位运算符:|	按位或
	printf("%d\n", i | k);//5,分别把这个两个数的二进制对比。只有同位两个数都是0,那么该位就为0,否则为1;例如:1|0=1,0|1=1,1|1=1,0|0=0
	// 逻辑运算符:||	逻辑或(或者)
	printf("%d\n", i || k);//1,如果i和k都为0;那么就返回0;如果i和k其中有一个数为1,那么就返回1

	// 位运算符:~	按位取反
	printf("%d\n", ~i);//-6,把i变量所有的二进制位取反;例如:~1=0,~0=1

	// 位运算符:^	按位异或
	printf("%d\n", i^k);//16,分别把这个两个数的二进制对比。如果同位两个数相同,该位就为0,不同为1;例如:1^0=1,0^1=0,1^1=1,0^0=0

	// 逻辑运算符:<	小于
	printf("%d\n", i < k);//1,如果i小于k,返回1,否者返回0
	// 位运算符:<<	按位左移
	printf("%d\n", k << 3);//168,把k所有的二进制位向左移3位,后面用0填充。相当于k乘以2的3次方,移动n位就乘以2的n次方。例如:0101,左移后:0101000

	// 逻辑运算符:>	大于
	printf("%d\n", i > k);//0,如果i大于k,返回1,否者返回0
	// 位运算符:>>	按位右移
	printf("%d\n", k >> 3);//2,把k所有的二进制位向右边移3位,前面空出来的有两种情况:1.全部补0,2.如果最高位为0就补0,为高位为1就补1;相当于k除以2的3次方,移动n位就除以2的n次方。前提是不能丢失;例如:0101000,右移后:0101

  

posted @ 2014-05-21 12:30  xz55  阅读(146)  评论(0编辑  收藏  举报