Vixente

entero de 32 bits con signo, sus bits y valores.

Jun 11th, 2013
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <bitset>
  3.  
  4. using namespace std;
  5.  
  6. // Funcion que devuelve la cadena de texto representando los bits del numero dado.
  7. string Bits(int numero);
  8.  
  9. int main()
  10. {
  11.     int valor = 0;              // valor es 0, por lo que todos sus bits están a 0 inicialmente.
  12.  
  13.     // Invertimos todos los bits. O sea, se ponen todos a 1. ~ es el operador NOT en operaciones de bit.
  14.     valor = ~valor;
  15.  
  16.     // Desactivamos el bit de signo (el más pesado). Cuando está a 0, significa que el número es positivo, cuando está a 1, significa que es negativo.
  17.     valor &= 0x7fffffff; // (el valor del último bit en hexadecimal)
  18.  
  19.     cout << "POSITIVO:" << endl;
  20.  
  21.     // Recorremos 32 iteraciones y al mismo tiempo que incrementamos el contador, hacemos que valor desplace sus bits hacia la derecha en una posición. ( valor >>= 1 )
  22.     for(int i=0; i< 32; i++, valor>>=1)
  23.         cout << Bits(valor) << " = " << valor << endl;
  24.  
  25.     // Ahora hacemos la parte negativa. Volvemos a poner valor a 0 y lo invertimos.
  26.     valor = 0;
  27.     valor = ~valor;
  28.  
  29.     // Esta vez no quitamos el bit de signo... Por lo que todos los bits están a 1. (-1 en decimal)
  30.  
  31.     cout << "NEGATIVO: " << endl;
  32.     // Esta vez desplazamos los bits a la izquierda.
  33.     for(int i=1; i<= 32; i++, valor<<=1)
  34.         cout << Bits(valor) << " = " << valor << endl;
  35. }
  36.  
  37. string Bits(int numero)
  38. {
  39.     // Construimos un bitset con el tamaño del int por defecto (32 bits en Sistemas Operativos de 32/64 bits) dandole el valor del numero pasado a la función
  40.     // sizeof(int) devuelve 4 que equivale a 4 bytes, los cuales para pasar a bits hay que multiplicar por 8.
  41.     bitset<sizeof(int)*8> _bits(numero);
  42.  
  43.     // Devolvemos la string (cadena de texto) de los bits.
  44.     return _bits.to_string();
  45. }
Add Comment
Please, Sign In to add comment