Operador de complemento bit a bit (~ tilde)

Requisito previo:
Operadores bit a bit en C/ C++
Operadores bit a bit en Java

El operador de complemento bit a bit es un operador unario (funciona en un solo operando). Toma un número e invierte todos sus bits. Cuando se aplica el operador bit a bit en los bits, todos los 1 se convierten en 0 y viceversa. El operador para el complemento bit a bit es ~ (Tilde).

Ejemplo:

Entrada: ~ 0000 0011
Salida: 1111 1100

Entrada: 1110 0111
Salida: 0001 1000

El operador de complemento bit a bit 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 (suponiendo 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).

Entrada: 
n = 2
Forma binaria de 2 = 0010
Operación de complemento bit a bit en 2 = ~ 0010 
                                                         = 1101 
1101 es equivalente al valor decimal 13.

Salida esperada: 13
Salida correcta: -3

El compilador devuelve el complemento a 2 del valor de entrada.

C

// C program to implement
// the above approach
#include <stdio.h>
 
// Driver code
int main()
{
  int n = 2;
  printf("Bitwise complement of %d : %d",
          n, ~n);
  return 0;
}

C++

// C++ program to implement
// the above approach
#include <iostream>
using namespace std;
 
// Driver code
int main()
{
  int a = 2;
  cout << "Bitwise complement of " <<
           a << " : " << ~a;
}

Java

// Java program to implement
// the above approach
import java.io.*;
 
// Driver code
class GFG
{
    public static void main (String[] args)
    {
        int a = 2;
        System.out.println("Bitwise complement of " +
                            a + " : " + ~a);
    }
}

Python3

# Python3 program to implement
# the above approach
 
# Driver code
n = 2
print("Bitwise complement of {n} :",
       ~n)

C#

// C# program to implement 
// the above approach
using System;
 
class GFG{
 
static public void Main()
{
    int a = 2;
     
    Console.WriteLine("Bitwise complement of " + a +
                      " : " + ~a);
}
}

Javascript

<script>
 
// JavaScript program to implement 
// the above approach
 
// Driver code
let a = 2;
document.write("Bitwise complement of " +
               a + " : " + ~a);
 
// This code is contributed by Potta Lokesh
 
</script>

Producción:

Complemento bit a bit de 2 : -3

Explicación:
el complemento bit a bit de 2 (~2) es -3 en lugar de 13, pero ¿por qué? 
Cuando los números se imprimen en base 10, el resultado de una operación NOT puede ser sorprendente. En particular, los números positivos pueden convertirse en negativos y viceversa.

Primero encontremos la representación binaria del complemento bit a bit de 2 que es -3

Los números negativos se almacenan como complemento a dos de la contraparte positiva.

Complemento a 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. 

Ejemplo:

Complemento bit a bit Operación de 2 (~ 0010): 1101

Calcule el complemento a 2 de 3:  
Forma binaria de 3 = 0011 
Complemento a 1 de 3 = 1100 
Sumando 1 al complemento a 1 = 1100 +1
Complemento a 2 de 3 = 1101  

Nota: 
El Complemento bit a bit de 2 es igual que la representación binaria de -3 

Por lo tanto, se puede concluir del ejemplo anterior que:

  1. Para cualquier entero n, el complemento bit a bit de n será -(n+1).
  2. Complemento bit a bit de N = ~N (representado en forma de complemento a 2).
  3. 2’complemento de ~N= -(~(~N)+1) = -(N+1).

Publicación traducida automáticamente

Artículo escrito por sathiyamoorthics19 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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