Operador bit a bit en programación C y C++

Publicado: 2022-12-09

En RAM, los datos se organizan como una secuencia de bytes. Cada byte contiene ocho bits consecutivos. Los operadores bit a bit de C y C++ son útiles cuando desea realizar algunas operaciones aritméticas en bits de los datos. Son bastante más rápidos y ocasionalmente se usan para mejorar la eficiencia de un programa. Trabajan en algoritmos bit a bit que realizan operaciones a nivel de bit o manipulan bits de varias maneras.

Los tipos de operadores bit a bit en C y C++:

  1. Y bit a bit
  2. O bit a bit
  3. bit a bit NO
  4. O exclusivo bit a bit (XOR)
  5. Operador de turno a la izquierda
  6. Operador de turno a la derecha

Entremos en los detalles de cada uno de ellos:

Tabla de contenido

1. Bit a bit Y:

El operador AND bit a bit en C o C++ usa un solo ampersand (&). Toma dos números como operandos y realiza AND en todos sus bits. El resultado es 1 solo si ambos bits son 1. Si alguno de los bits es 0, el resultado es 0. Esencialmente, este operador binario en C & C++ toma el AND lógico de los bits en cada posición de los dos números dados en forma binaria

Ejemplo:

Supongamos que la representación binaria de dos números a y b es:

a = 01011000

b = 10111001

Entonces, a & b = 00011000

Como se ve en el ejemplo anterior, el resultado muestra '1' solo en aquellos lugares donde los números a y b tienen 1. Para todos los demás lugares, el resultado muestra '0'.

2. Bit a bit O:

En C y C++, OR bit a bit funciona de manera bastante similar a AND bit a bit. La única diferencia es que en el operador OR bit a bit, para que la posición del bit sea '1' en el resultado, solo uno de los dos bits debe ser '1'. Este operador toma dos números como operandos y realiza OR en cada bit de los dos números.

Funciona de la siguiente manera:

  • Si ambos bits son '1', el resultado es '1'.
  • Si ambos bits son '0', el resultado es '0'.
  • Si alguno de los bits es '1', el resultado es '1'.

Es uno de los operadores bit a bit de C++ más simples y más utilizados. Su símbolo es la pipa |. Además, es idéntico al operador lógico booleano ||.

Ejemplo:

Supongamos que la representación binaria de dos números a| b es:

a = 01101001

b = 10111000

Entonces, un| b = 11111001

3. Bit a bit NO:

También conocido como el operador Bitwise NOT, invierte cada bit en el resultado. Su símbolo es la tilde (~). Una manera fácil de recordar el funcionamiento de este operador es que la tilde se conoce ocasionalmente como twiddle, y el complemento bit a bit gira cada bit. Significa que si tiene un 1, el resultado es 0, y viceversa. En otras palabras, este operador bit a bit en C & C++ toma un número e invierte todos los bits.

Al determinar el mayor valor posible para cualquier número sin signo, este es uno de los operadores bit a bit de C++ más útiles .

Ejemplo:

número entero sin signo = ~0;

Aquí, 0 significa todos 0: 00000000. Entonces, implementar el operador Bitwise NOT da como resultado 1: 11111111. Debido a que num es un int sin signo, no necesita preocuparse por los bits de signo o el complemento a dos. 1s es el mayor número posible en el resultado.

Una de las características cruciales del operador Bitwise NOT es el Complemento a 2. El complemento a 2 de un número es igual al complemento de ese número más 1.

Ejemplo:

a = 00000000

Entonces, es complemento a 2 = -(11111111+1) = -00000000 = -0(decimal)

Nota: El complemento bit a bit de cualquier número N es igual a -(N+1).

Aprenda cursos de desarrollo de software en línea de las mejores universidades del mundo. Obtenga Programas PG Ejecutivos, Programas de Certificado Avanzado o Programas de Maestría para acelerar su carrera.

4. OR exclusivo bit a bit (XOR):

La operación OR-exclusivo acepta dos entradas y genera un 1 si una u otra entrada es un 1. Pero el resultado es 0 si ambas son 1. Si ambas entradas son 0 o ambas son 1, el resultado es 0. El resultado de XOR es 1 solo si los dos bits son diferentes. El símbolo de este operador binario en C y C++ es el signo de intercalación (^). Además, este operador bit a bit en C y C++ se abrevia como XOR. Realiza la operación OR exclusiva en cada par de bits. Es esencial tener en cuenta que no existe un operador booleano equivalente a este operador.

Ejemplo:

Supongamos que tenemos dos números como

a = 10101010

b = 01110010

Ahora a ^ b = 10101010 ^ 01110010 = 11011000

Puedes entender XOR de la siguiente manera. Suponga que tiene un bit, ya sea 0 o 1, que llama A. Ahora, cuando toma A XOR 0, obtendrá A de vuelta. Entonces, si A es 1, obtienes 1 y viceversa. Cuando tomas A XOR 1, significa que volteas A. Entonces, si A es 1, obtienes 0 y viceversa.

Si implementa la operación XOR bit a bit dos veces, es decir, tiene dos bits, A y B, y establece C = A XOR B, luego realiza C XOR B. En ese caso, el resultado que obtiene es A XOR B XOR C. O voltea cada bit de A dos veces o no voltea ningún bit. Por lo tanto, simplemente obtiene una A tal como está.

Puede considerar la operación binaria XOR como una especie de jugueteo selectivo. Si implementa XOR en dos números, uno de los cuales es todo 1, el resultado es equivalente a un giro.

5. Operador de turno a la izquierda:

Este operador bit a bit desplaza todos los bits a la izquierda en un cierto número de bits especificados. Las posiciones de bits que ha vaciado el operador de desplazamiento a la izquierda se rellenan con 0. Su símbolo es <<.

En C o C++, funciona de tal manera que primero toma dos números, desplaza a la izquierda los bits del primer operando y el segundo operando indica cuántos lugares desplazar el número.

Sintaxis:

un <<= 5

Aquí está el programa C/C++ de ejemplo para implementar el operador de desplazamiento a la izquierda:

int principal()

{

int a = 5;

un <<= 2;

contar << “x : ” << x << endl;

}

Salida: a = 20

Cursos y artículos populares sobre ingeniería de software

Programas Populares
Programa PG Ejecutivo en Desarrollo de Software - IIIT B Programa de Certificación Blockchain - PURDUE Programa de Certificado de Ciberseguridad - PURDUE MSC en Ciencias de la Computación - IIIT B
Otros artículos populares
Salario de ingeniero de nube en los EE. UU. 2021-22 Salario del arquitecto de soluciones de AWS en EE. UU. Salario de desarrollador de backend en los EE. UU. Salario de desarrollador front-end en EE. UU.
Salario de desarrollador web en EE. UU. Preguntas de la entrevista de Scrum Master en 2022 ¿Cómo iniciar una carrera en seguridad cibernética en 2022? Opciones de carrera en los EE. UU. para estudiantes de ingeniería

6. Operador de turno a la derecha:

Este operador bit a bit desplaza todos los bits a la derecha en un cierto número de bits especificados. Su símbolo es >>. En C o C++, este operador primero toma dos números, desplaza a la derecha los bits del primer operando y el segundo operando especifica la cantidad de desplazamiento en el número.

Sintaxis:

un >>= 5

Un ejemplo de programa C/C++ para implementar el operador de desplazamiento a la derecha:

int principal() {

int a = 5;

un >> = 2;

contar << “x : ” << x << endl;

}

Salida: a = 1

Cursos y artículos populares sobre ingeniería de software

Programas Populares
Programa PG Ejecutivo en Desarrollo de Software - IIIT B Programa de Certificación Blockchain - PURDUE Programa de Certificado de Ciberseguridad - PURDUE MSC en Ciencias de la Computación - IIIT B
Otros artículos populares
Salario de ingeniero de nube en los EE. UU. 2021-22 Salario del arquitecto de soluciones de AWS en EE. UU. Salario de desarrollador de backend en los EE. UU. Salario de desarrollador front-end en EE. UU.
Salario de desarrollador web en EE. UU. Preguntas de la entrevista de Scrum Master en 2022 ¿Cómo iniciar una carrera en seguridad cibernética en 2022? Opciones de carrera en los EE. UU. para estudiantes de ingeniería

¿Cuándo debería usar los operadores bit a bit en C y C++?

  • Ahorra espacio:

Los operadores bit a bit ayudan a ahorrar espacio. Un problema común que se encuentra cuando se trabaja en el nivel de bits individuales es que si desea más espacio o ahorrar tiempo, es posible que deba rediseñar grandes porciones de su programa. Pero el uso de operadores bit a bit en C y C++ puede eliminar las dependencias; por ejemplo, puede usar ~0 para obtener el entero más grande posible. El cambio de bits para multiplicar por dos es una operación típica. Por lo tanto, no afecta la legibilidad, a diferencia del uso avanzado de la manipulación de bits que puede afectar en algunos casos.

  • Cifrado:

Si está trabajando en algún tipo de cifrado o en un sistema que necesita campos de bits para almacenar los atributos booleanos.

Datos únicos sobre los operadores bit a bit

  • El OR bit a bit de dos números es simplemente la suma de esos números si no hay ningún acarreo involucrado. De lo contrario, simplemente necesita agregar su AND bit a bit. Por ejemplo, suponga que x = 5(101) e y = 2(010). Debido a que no hay ningún acarreo involucrado, la suma es simplemente x|y. Pero, si ahora cambiamos 'x' a 6 (110), la suma cambiará a x|y + x&y porque ahora está involucrado el acarreo.
  • El operador XOR bit a bit es el más valioso desde el punto de vista de la entrevista técnica. Aquí se analiza un ejemplo de uno de los problemas de entrevista relacionados con esto. “Para el conjunto dado de números que consta de todos los elementos que ocurren un número par de veces excepto un número, encuentre el número impar que ocurre”. Debe hacer XOR a todos los números para resolver este problema.
  • Los operadores bit a bit de desplazamiento a la derecha y a la izquierda no deben utilizarse para los números negativos. El segundo operando, que determina el número de turnos, contiene un número negativo, lo que conduce a un comportamiento indefinido en C y C++. Por ejemplo, los resultados de 1 >>- 1 y 1 << -1 no están definidos.
  • El comportamiento no se especifica si el desplazamiento del número supera la capacidad del entero. Por ejemplo, 1 << 65 no se especifica si los enteros se almacenan en formato de 64 bits.
  • No se produce ninguna operación de desplazamiento si el segundo operando (el que determina el número de desplazamientos) es 0.

Comience con su viaje de informática con UpGrad:

Si su objetivo es aprender en detalle sobre el desarrollo frontend (JavaScript, HTML, CSS), backend (NoSQL-MongoDB) y microservicios, entonces puede seguir el curso de Maestría en Ciencias en Ciencias de la Computación de UpGrad. Impartido por IIIT Bangalore y LJMU Alumni Status, este curso lo ayuda a iniciar su carrera como ingeniero de software/desarrollador full-stack con los gigantes tecnológicos de todo el mundo.

El curso cubre el acceso gratuito al Bootcamp de transición profesional para codificadores principiantes y no tecnológicos. Aprenderá más de diez lenguajes y herramientas de programación en este curso, preparándolo completamente para asumir funciones complejas en la industria.

¿Cuál es el uso de los operadores bit a bit en C++?

En C++, los operadores bit a bit realizan operaciones en datos enteros a nivel binario. Operan en patrones de bits que involucran la manipulación de bits individuales. Por lo tanto, una operación a nivel de bits también se conoce como programación a nivel de bits. Los operadores bit a bit en C++ se utilizan principalmente para un cálculo más rápido, ya que solo funcionan en dos dígitos, es decir, 0 y 1. Estos operadores también pueden realizar pruebas y cambiar los bits reales.

¿Puedes usar los operadores de desplazamiento a la izquierda y a la derecha juntos en un código?

Sí, puede combinar los operadores de desplazamiento a la izquierda y a la derecha, y después de eso, puede extraer los datos de una expresión entera.

¿El operador complementario invierte toda la secuencia de código?

No, no lo hace. Da la vuelta a los 1 y 0. Entonces, todos los 1 se convierten en 0 y viceversa.

¿Por qué el otro nombre del operador de complemento bit a bit es el operador de complemento de uno?

La razón es que siempre toma solo un operando o valor. Es un operador unario. Cuando realiza un complemento en cualquier bit, todos los 0 se convierten en 1 y viceversa. Por ejemplo, si tiene una expresión entera con el valor 1111 0000. Después de realizar la operación de complemento bit a bit, el valor se convierte en 0000 1111.