В чем разница между побитовыми и логическими операторами И в C / C ++?

Опубликовано: 21 Января, 2022

Побитовый оператор And представлен как '&', а логический оператор представлен как '&&'. Ниже приведены некоторые основные различия между двумя операторами.

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++14

#include<stdio.h>
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 ");
 
    // A typical use of "&"
    int z = x & y;   // 0011
    
    printf ("z = %d", z);
 
    return 0;
}
Output
y is greater than 1 AND x
z = 3

б) Если целое значение используется в качестве операнда для '&&', который должен работать с логическими значениями, в C.
… ..Нулевое значение считается ложным, а ненулевое значение - истинным.

Например, в следующей программе x и y считаются равными 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<stdio.h>
// Example that uses non-integral expression as
// operator for "&"
int main()
{
   float x = 2.0, y = 5.0;
   printf("%d", x&y);
   return 0;
}

Выход:

 ошибка: недопустимые операнды для двоичного & (имеют 'float' и 'float')

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<stdio.h>
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

Такие же различия есть между логическим ИЛИ '||' и побитовое ИЛИ '|'.

Эта статья предоставлена Ujjwal Jain . Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.

Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .

Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.

C