本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第2章,建议15-3,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
建议15-3:避免“&”与“&&”混淆
同建议15-2相似,“&&”是逻辑操作符(与),它的操作数是布尔型;而“&”是位操作符(与),其操作数是位序列。它们之间的区别如代码清单2-6所示。
代码清单2-6 “&”与“&&”运算符操作示例
#include <stdio.h>
int main (void)
{
unsigned int x = 0x1101;
unsigned int y = 0x1100;
/*逻辑操作*/
printf("sizeof(x && y): %d\n", sizeof(x && y));
if(x&&y)
{
printf("x && y : %d(True) \n", x&&y);
}
else
{
printf("x && y : %d(False) \n", x&&y);
}
/*位操作*/
printf("sizeof(x & y): %d\n", sizeof(x & y));
printf("x & y : %x \n", x&y);
return 0;
}
在代码清单2-6中,因为变量x与变量y都不为0,所以执行语句“if(x&&y)”时返回1。而当执行“x&y”(即1101&1100)时,相应的位之间逐一进行逻辑运算(与),因此所得到的结果为1100。代码清单2-6的执行结果如图2-6所示。