📜  C / C++中按位与逻辑AND运算符之间有什么区别?

📅  最后修改于: 2021-05-26 02:02:54             🧑  作者: Mango

按位与运算符表示为“&”,而逻辑运算符表示为“ &&”。以下是这两个运算符之间的一些基本区别。

a)逻辑和运算符“ &&”期望其操作数为布尔表达式(1或0)并返回布尔值。
按位和运算符’&’处理积分值(short,int,unsigned,char,bool,unsigned char,long),并返回Integral值。

C++14
#include
int main()
{
    int x = 3;  //...0011
    int y = 7;  //...0111
 
    // A typical use of '&&'
    if (y > 1 && y > x)
      printf("y is greater than 1 AND x\n");
 
    // A typical use of '&'
    int z = x & y;   // 0011
    
    printf ("z = %d", z);
 
    return 0;
}


C
#include
// Example that uses non-boolean expression as
// operand for '&&'
int main()
{
   int x = 2, y = 5;
   printf("%d", x&&y);
   return 0;
}


C
#include
// Example that uses non-integral expression as
// operator for '&'
int main()
{
   float x = 2.0, y = 5.0;
   printf("%d", x&y);
   return 0;
}


C
#include
int main()
{
    int x = 0;
 
    // 'Geeks in &&' is NOT
    // printed because x is 0
    printf("%d\n", (x && printf("Geeks in && ")));
 
    // 'Geeks in &' is  printed
    printf("%d\n", (x & printf("Geeks in & ")));
 
    return 0;
}


输出
y is greater than 1 AND x
z = 3

b)如果将整数值用作应该用于布尔值的’&&’的操作数,则在C中使用以下规则。
…..零被认为是错误的,非零被认为是正确的。

例如,在以下程序中,x和y被视为1。

C

#include
// Example that uses non-boolean expression as
// operand for '&&'
int main()
{
   int x = 2, y = 5;
   printf("%d", x&&y);
   return 0;
}
输出
1

使用非整数表达式作为按位&的操作数是编译器错误。例如,以下程序显示编译器错误。

C

#include
// Example that uses non-integral expression as
// operator for '&'
int main()
{
   float x = 2.0, y = 5.0;
   printf("%d", x&y);
   return 0;
}

输出:

error: invalid operands to binary & (have 'float' and 'float')

c)如果第一个操作数为false,则’&&’运算符不会评估第二个操作数。类似地’||’当第一个操作数为true时,不评估第二个操作数。按位“&”和“ |”运算符始终会评估其操作数。

C

#include
int main()
{
    int x = 0;
 
    // 'Geeks in &&' is NOT
    // printed because x is 0
    printf("%d\n", (x && printf("Geeks in && ")));
 
    // 'Geeks in &' is  printed
    printf("%d\n", (x & printf("Geeks in & ")));
 
    return 0;
}
输出
0
Geeks in & 0

逻辑或’||’之间存在相同的区别并按位或’|’。

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。