按位与运算符表示为“&”,而逻辑运算符表示为“ &&”。以下是这两个运算符之间的一些基本区别。
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基础课程》。