A Bitwise And operator is represented as ‘&’ and a logical operator is represented as ‘&&’. The following are some basic differences between the two operators.
a) The logical and operator ‘&&’ expects its operands to be boolean expressions (either 1 or 0) and returns a boolean value.
The bitwise and operator ‘&’ work on Integral (short, int, unsigned, char, bool, unsigned char, long) values and return Integral value.
C++
#include<iostream>
using namespace std;
int main()
{
int x = 3;
int y = 7;
if (y > 1 && y > x)
cout<< "y is greater than 1 AND x\n" ;
int z = x & y;
cout<< "z = " << z;
return 0;
}
|
C
#include<stdio.h>
int main()
{
int x = 3;
int y = 7;
if (y > 1 && y > x)
printf ( "y is greater than 1 AND x\n" );
int z = x & y;
printf ( "z = %d" , z);
return 0;
}
|
Outputy is greater than 1 AND x
z = 3
Time Complexity: O(1)
Auxiliary Space: O(1)
b) If an integral value is used as an operand for ‘&&’ which is supposed to work on boolean values, the following rule is used in C.
…..Zero is considered as false and non-zero is considered as true.
For example in the following program x and y are considered as 1.
C++
#include <iostream>
using namespace std;
int main()
{
int x = 2, y = 5;
int z = x && y;
cout << " " << z;
return 0;
}
|
C
#include<stdio.h>
int main()
{
int x = 2, y = 5;
printf ( "%d" , x&&y);
return 0;
}
|
Time Complexity: O(1)
Auxiliary Space: O(1)
It is compiler error to use the non-integral expression as operand for bitwise &. For example the following program shows compiler error.
C++
#include<iostream>
using namespace std;
int main()
{
float x = 2.0, y = 5.0;
cout << " " << x&y;
return 0;
}
|
C
#include<stdio.h>
int main()
{
float x = 2.0, y = 5.0;
printf ( "%d" , x&y);
return 0;
}
|
Output:
error: invalid operands to binary & (have 'float' and 'float')
Time Complexity: O(1)
Auxiliary Space: O(1)
c) The ‘&&’ operator doesn’t evaluate the second operand if the first operand becomes false. Similarly ‘||’ doesn’t evaluate the second operand when first operand becomes true. The bitwise ‘&’ and ‘|’ operators always evaluate their operands.
C++
#include <iostream>
using namespace std;
int main()
{
int x = 0;
printf ( "%d\n" , (x && printf ( "Geeks in && " )));
printf ( "%d\n" , (x & printf ( "Geeks in & " )));
return 0;
}
|
C
#include<stdio.h>
int main()
{
int x = 0;
printf ( "%d\n" , (x && printf ( "Geeks in && " )));
printf ( "%d\n" , (x & printf ( "Geeks in & " )));
return 0;
}
|
Time Complexity: O(1)
Auxiliary Space: O(1)
The same differences are there between logical OR ‘||’ and bitwise OR ‘|’.
This article is contributed by Ujjwal Jain. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.