C Operadores bit a bit: operaciones Y, O, XOR, Complemento y Cambio

En este tutorial, aprenderá acerca de los 6 operadores bit a bit en la programación en C con ejemplos.

En la unidad aritmético-lógica (que está dentro de la CPU), las operaciones matemáticas como: suma, resta, multiplicación y división se realizan a nivel de bits. Para realizar operaciones a nivel de bits en la programación C, se utilizan operadores bit a bit.

Operadores Significado de los operadores
Y Y bit a bit
| O bit a bit
^ XOR bit a bit
~ Complemento bit a bit
<< Desplazar a la izquierda
>> Cambiar a la derecha

Operador AND bit a bit &

La salida de AND bit a bit es 1 si los bits correspondientes de dos operandos son 1. Si cualquier bit de un operando es 0, el resultado del bit correspondiente se evalúa como 0.

Supongamos la operación AND bit a bit de dos enteros 12 y 25.

 12 = 00001100 (en binario) 25 = 00011001 (en binario) Operación de bits de 12 y 25 00001100 y 00011001 ________ 00001000 = 8 (en decimal)

Ejemplo n. ° 1: AND bit a bit

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a&b); return 0; ) 

Salida

 Salida = 8

Operador OR bit a bit |

La salida de OR bit a bit es 1 si al menos un bit correspondiente de dos operandos es 1. En la programación en C, el operador OR bit a bit se denota por |.

12 = 00001100 (en binario) 25 = 00011001 (en binario) O bit a bit Operación de 12 y 25 00001100 | 00011001 ________ 00011101 = 29 (en decimal)

Ejemplo # 2: OR bit a bit

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a|b); return 0; ) 

Salida

 Salida = 29

Operador XOR bit a bit (OR exclusivo) ^

El resultado del operador XOR bit a bit es 1 si los bits correspondientes de dos operandos son opuestos. Se denota por ^.

 12 = 00001100 (en binario) 25 = 00011001 (en binario) Operación XOR bit a bit de 12 y 25 00001100 00011001 ________ 00010101 = 21 (en decimal)

Ejemplo # 3: XOR bit a bit

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a^b); return 0; )

Salida

 Salida = 21

Operador de complemento bit a bit ~

El operador complementario bit a bit es un operador unario (funciona solo en un operando). Cambia de 1 a 0 y de 0 a 1. Se denota con ~.

 35 = 00100011 (en binario) Complemento bit a bit Operación de 35 ~ 00100011 ________ 11011100 = 220 (en decimal) 

Twist en el operador de complemento bit a bit en programación C

El complemento bit a bit de 35 (~ 35) es -36 en lugar de 220, pero ¿por qué?

Para cualquier entero n, el complemento bit a bit de n será -(n+1). Para comprender esto, debe tener el conocimiento del complemento de 2.

Complemento de 2

El complemento a dos es una operación con números binarios. El complemento a 2 de un número es igual al complemento de ese número más 1. Por ejemplo:

 Complemento a 2 binario decimal 0 00000000 - (11111111 + 1) = -00000000 = -0 (decimal) 1 00000001 - (11111110 + 1) = -11111111 = -256 (decimal) 12 00001100 - (11110011 + 1) = -11110100 = -244 (decimal) 220 11011100 - (00100011 + 1) = -00100100 = -36 (decimal) Nota: El desbordamiento se ignora al calcular el complemento a 2. 

El complemento bit a bit de 35 es 220 (en decimal). El complemento a 2 de 220 es -36. Por lo tanto, la salida es -36 en lugar de 220.

El complemento bit a bit de cualquier número N es - (N + 1). Así es cómo:

 complemento bit a bit de N = ~ N (representado en forma de complemento a 2) 2'complemento de ~ N = - (~ (~ N) +1) = - (N + 1) 

Ejemplo # 4: Complemento bit a bit

 #include int main() ( printf("Output = %d",~35); printf("Output = %d",~-12); return 0; ) 

Salida

 Salida = -36 Salida = 11

Operadores de turno en programación C

There are two shift operators in C programming:

  • Right shift operator
  • Left shift operator.

Right Shift Operator

Right shift operator shifts all bits towards right by certain number of specified bits. It is denoted by>>.

 212 = 11010100 (In binary) 212>>2 = 00110101 (In binary) (Right shift by two bits) 212>>7 = 00000001 (In binary) 212>>8 = 00000000 212>>0 = 11010100 (No Shift) 

Left Shift Operator

Left shift operator shifts all bits towards left by a certain number of specified bits. The bit positions that have been vacated by the left shift operator are filled with 0. The symbol of the left shift operator is <<.

 212 = 11010100 (In binary) 212<<1 = 110101000 (In binary) (Left shift by one bit) 212<<0 = 11010100 (Shift by 0) 212<<4 = 110101000000 (In binary) =3392(In decimal)

Example #5: Shift Operators

 #include int main() ( int num=212, i; for (i=0; i>i); printf(""); for (i=0; i<=2; ++i) printf("Left shift by %d: %d", i, num< 
 Right Shift by 0: 212 Right Shift by 1: 106 Right Shift by 2: 53 Left Shift by 0: 212 Left Shift by 1: 424 Left Shift by 2: 848 

Articulos interesantes...