《编写高质量代码:改善c程序代码的125个建议》——建议15-2:避免“|”与“||”混淆

简介:

本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第2章,建议15-2,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

建议15-2:避免“|”与“||”混淆

在C语言中,“||”是逻辑操作符(或),它的操作数是布尔型,即只有“0”(表示false)和“1”(表示true)两个数值。C语言规定,在逻辑运算中,所有非0的数值都被看成1处理。
而“|”是位操作符(或),其操作数是位序列。位序列可以是字符型、整型与长短整型等(通常情况下选择无符号整型)。在位运算中,相应的位之间进行逻辑运算,因此,从逻辑上讲,位运算过程包含多个逻辑运算过程。
下面通过代码清单2-5来了解两者之间的区别。

代码清单2-5 “|”与“||”运算符操作示例
#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-5中,因为变量x与变量y都不为0,所以执行语句if(x||y) 返回1。而当执行x|y(即1101|1100)时,相应的位之间逐一地进行逻辑运算(或),因此所得到的结果为1101。代码清单2-5的执行结果如图2-5所示。


549b5eacc83fdbf1afa62d83b7c8de6c7b857835
相关文章
|
存储 C语言
《编写高质量代码:改善c程序代码的125个建议》—— 导读
众所周知,C语言是一门既具有高级语言特点,又有汇编语言特点的通用计算机编程语言,无论是操作系统(如Microsoft Windows、Mac OS X、Linux和UNIX等)、嵌入式系统与普通应用软件,还是目前流行的移动智能设备开发,随处都可以看见它依然矫健的身影。
1883 0