Tutorialspoint.dev

What are the differences between bitwise and logical AND operators in C/C++?

A Bitwise And operator is represented as ‘&’ and a logical operator is represented as ‘&&’. 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 ‘&’ works on Integral (short, int, unsigned, char, bool, unsigned char, long) values and return Integral value.

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 y ");
  
    // A typical use of '&'
    int z = x & y;   // 0011
     
    printf ("z = %d", z);
  
    return 0;

Output

y is greater than 1 AND y
z = 3.

b) If an integral value is used as an operand for ‘&&’ which is supposed to work on boolean values, following rule is used in C.
…..A 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.

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

Output



1

It is compiler error to use non-integral expression as operand for bitwise &. For example the following program shows compiler error.

// Example that uses non-integral expression as 
// operator for '&'
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')

c) The ‘&&’ operator doesn’t evaluate second operand if first operand becomes false. Similarly ‘||’ doesn’t evaluate second operand when first operand becomes true. The bitwise ‘&’ and ‘|’ operators always evaluate their operands.

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

Output:

0
Geeks in & 0 

The same differences are there between logical OR ‘||’ and bitwise OR ‘|’.



This article is attributed to GeeksforGeeks.org

leave a comment

code

0 Comments

load comments

Subscribe to Our Newsletter