es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for 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:

    11111111111111111110001110000000 -> invertir -> 00000000000000000001110011111111 -> sumar 1 -> 00000000000000000001110100000000
    

    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.

Comments are closed.