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

1

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\n");

    // 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\n", (x && printf("Geeks in && ")) );

   // 'Geeks in &' is  printed
   printf("%d\n", (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 contributed by Ujjwal Jain. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.

Recommended Posts:



1 Average Difficulty : 1/5.0
Based on 1 vote(s)










Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.