/* 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