in

Operadores bit a bit en C / C ++ – GeeksforGeeks

gfg 200x200 min

En C, los siguientes 6 operadores son operadores bit a bit (funcionan a nivel de bit)

Operators In C

  1. los & (bit a bit AND) en C o C ++ toma dos números como operandos y hace Y en cada bit de dos números. El resultado de AND es 1 solo si ambos bits son 1.
  2. los | (OR bit a bit) en C o C ++ toma dos números como operandos y hace OR en cada bit de dos números. El resultado de OR es 1 si cualquiera de los dos bits es 1.
  3. los ^ (XOR bit a bit) en C o C ++ toma dos números como operandos y hace XOR en cada bit de dos números. El resultado de XOR es 1 si los dos bits son diferentes.
  4. los en C o C ++ toma dos números, desplaza a la izquierda los bits del primer operando, el segundo operando decide el número de lugares a desplazar.
  5. los >> (desplazamiento a la derecha) en C o C ++ toma dos números, desplaza a la derecha los bits del primer operando, el segundo operando decide el número de lugares a desplazar.
  6. los ~ (bit a bit NO) en C o C ++ toma un número e invierte todos los bits

Ejemplo:

C

#include <stdio.h>

int main()

{

    

    unsigned char a = 5, b = 9;

    

    printf("a = %d, b = %dn", a, b);

    printf("a&b = %dn", a & b);

    

    printf("a|b = %dn", a | b);

    

    printf("a^b = %dn", a ^ b);

    

    printf("~a = %dn", a = ~a);

    

    printf("b<<1 = %dn", b << 1);

    

    printf("b>>1 = %dn", b >> 1);

    return 0;

}

Producción:
a = 5, b = 9
a&b = 1
a|b = 13
a^b = 12
~a = 250
b<<1 = 18
b>>1 = 4

Datos interesantes sobre los operadores bit a bit

  1. Los operadores de desplazamiento a la izquierda y a la derecha no deben utilizarse para números negativos.. Si el segundo operando (que decide el número de cambios) es un número negativo, da como resultado un comportamiento indefinido en C. Por ejemplo, los resultados de 1 > -1 no están definidos. Además, si el número se desplaza más que el tamaño del entero, el comportamiento no está definido. Por ejemplo, 1 esta para más detalles.
    Nota: En C ++, este comportamiento está bien definido.
  2. El operador XOR bit a bit es el operador más útil de a perspectiva de la entrevista técnica. Se utiliza en muchos problemas. Un ejemplo simple podría ser “Dado un conjunto de números donde todos los elementos ocurren un número par de veces excepto un número, encuentre el número impar”. Este problema se puede resolver de manera eficiente simplemente haciendo XOR de todos los números.

C

#include <stdio.h>

int findOdd(int arr[], int n)

{

    int res = 0, i;

    for (i = 0; i < n; i++)

        res ^= arr[i];

    return res;

}

int main(void)

{

    int arr[] = { 12, 12, 14, 90, 14, 14, 14 };

    int n = sizeof(arr) / sizeof(arr[0]);

    printf("The odd occurring element is %d ",

           findOdd(arr, n));

    return 0;

}

Producción:
The odd occurring element is 90
  1. Los siguientes son muchos otros problemas interesantes al usar el operador XOR.
    1. Encuentre el número perdido
    2. intercambiar dos números sin usar una variable temporal
    3. Una lista doblemente enlazada con uso eficiente de la memoria
    4. Encuentra los dos elementos que no se repiten.
    5. Encuentra los dos números con ocurrencias extrañas en una matriz no ordenada.
    6. Suma dos números sin usar operadores aritméticos.
    7. Intercambia bits en un número determinado /.
    8. Cuente el número de bits que se invertirán para convertir a en b.
    9. Encuentra el elemento que aparece una vez.
    10. Detecta si dos números enteros tienen signos opuestos.
  2. Los operadores bit a bit no deben usarse en lugar de operadores lógicos. El resultado de los operadores lógicos (&&, || y!) Es 0 o 1, pero los operadores bit a bit devuelven un valor entero. Además, los operadores lógicos consideran cualquier operando distinto de cero como 1. Por ejemplo, considere el siguiente programa, los resultados de & y && son diferentes para los mismos operandos.

C

#include <stdio.h>

int main()

{

    int x = 2, y = 5;

    (x & y) ? printf("True ") : printf("False ");

    (x && y) ? printf("True ") : printf("False ");

    return 0;

}

Los operadores de desplazamiento a la izquierda y desplazamiento a la derecha son equivalentes a la multiplicación y división por 2 respectivamente. Como se mencionó en el punto 1, solo funciona si los números son positivos.

C

#include <stdio.h>

int main()

{

    int x = 19;

    printf("x << 1 = %dn", x << 1);

    printf("x >> 1 = %dn", x >> 1);

    return 0;

}

Producción:
x << 1 = 38
x >> 1 = 9

2. El operador & se puede utilizar para comprobar rápidamente si un número es par o impar. El valor de la expresión (x & 1) sería distinto de cero solo si x es impar; de lo contrario, el valor sería cero.

C

#include <stdio.h>

int main()

{

    int x = 19;

    (x & 1) ? printf("Odd") : printf("Even");

    return 0;

}

3. El operador ~ debe usarse con cuidado. El resultado del operador ~ en un número pequeño puede ser un número grande si el resultado se almacena en una variable sin signo. Y el resultado puede ser un número negativo si el resultado se almacena en una variable con signo (asumiendo que los números negativos se almacenan en forma de complemento a 2, donde el bit más a la izquierda es el bit de signo)

C

#include <stdio.h>

int main()

{

    unsigned int x = 1;

    printf("Signed Result %d n", ~x);

    printf("Unsigned Result %ud n", ~x);

    return 0;

}

Producción:
Signed Result -2 
Unsigned Result 4294967294d
  1. Manipulación de bits (tácticas importantes)
  2. Hacks bit a bit para programación competitiva
  3. Trucos de bits para la programación competitiva

¡Atención lector! No dejes de aprender ahora. Obtenga todos los conceptos importantes de DSA con el Curso autodidacta de DSA a un precio asequible para los estudiantes y prepárese para la industria. Para completar su preparación desde el aprendizaje de un idioma hasta DS Algo y muchos más, consulte Curso completo de preparación para entrevistas.

En caso de que desee asistir clases en vivo con expertos, consulte Clases en vivo de DSA para profesionales que trabajan y Programación competitiva en vivo para estudiantes.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

apple touch icon@2

Windows Server 2008 R2: PowerShell dice que «la ejecución de scripts está deshabilitada en este sistema».

edit

Aceleración vs velocidad: diferencia y comparación