C++ Primer Ejercicio 4.25 convirtiendo número binario
Tengo una pregunta sobre el ejercicio 4.25 en C++ Primer:
Ejercicio 4.25: ¿Cuál es el valor de ~’q’ << 6 en una máquina con ints de 32 bits y chars de 8 bits, que utiliza el conjunto de caracteres Latin-1 en el cual ‘q’ tiene el patrón de bits 01110001?
Tengo la solución en binario, pero no entiendo cómo se convierte a int:
int main()
{
cout << (std::bitset<8 * sizeof(~'q' << 6)>(~'q' << 6)) << endl;
cout << (~'q' << 6) << endl;
return 0;
}
Después de ejecutarlo, se imprimen las siguientes 2 líneas:
11111111111111111110001110000000
-7296
La primera línea es lo que esperaba, pero no entiendo cómo se convierte en -7296.
Esperaría un número mucho más grande. Además, los convertidores en línea dan un resultado diferente a esto.
Gracias de antemano por la ayuda.
davy.ai
La conversión de binario a entero depende de la interpretación del número binario. En este caso, el número binario 11111111111111111110001110000000 se interpreta como un entero con signo complemento a dos de 32 bits.
En la representación complemento a dos, el bit más a la izquierda es el bit de signo, y determina si el número es positivo o negativo. Si el bit de signo es 0, el número es positivo y su magnitud se encuentra simplemente interpretando los bits restantes como un número binario. Si el bit de signo es 1, el número es negativo y su magnitud se encuentra invirtiendo todos sus bits y sumándole 1.
En este caso, el bit más a la izquierda del número binario es 1, por lo que representa un número negativo. Para convertirlo a decimal, debemos invertir todos sus bits (excepto el bit de signo) y sumarle 1:
El número binario resultante es 00000000000000000001110100000000, que es igual a 0b111010000000 en binario y -7296 en decimal. Por lo tanto, el valor de ~’q’ << 6 en una máquina con enteros de 32 bits y caracteres de 8 bits, que utiliza el conjunto de caracteres Latin-1 en el cual ‘q’ tiene el patrón de bits 01110001, es -7296.