¿Cómo determina la computadora el desbordamiento al realizar sumas y restas binarias?
El desbordamiento, cuando la suma y resta binaria, depende del "carril más alto" y del "segundo acarreo más alto".
Si los dos números de acarreo son iguales, no hay desbordamiento.
Supongamos que los números b7b6b5b4b3b2b1b0 y a7a6a5a4a3a2a1a0 se suman con dos complementos de 8 bits.
El acarreo de b7 a7 se llama C7, y el acarreo de b6 a6 se llama C6.
Entonces, C7 y C6, si son diferentes, son desbordamientos.
La pregunta que hace el cartel es la siguiente. Es imposible juzgar el desbordamiento en función de estos, porque no existe un "segundo acarreo más alto".
Desbordamiento (b7 y a7 son marcadores simbólicos), entonces _ _ _
El resultado OR lógico de A.B7 y a7 debe ser 1.
B. La suma lógica de B7 y a7 debe ser 0.
C.El resultado XOR lógico de B7 y a7 debe ser 1.
El resultado XOR lógico de D.B7 y a7 debe ser 0; la respuesta es d.
Datos extendidos:
En casi todos los lenguajes informáticos, nuevos o antiguos, cualquier intento de desbordar un búfer suele ser detectado y detenido automáticamente por el propio lenguaje (por ejemplo, lanzando un excepción o agregar más espacio al búfer según sea necesario). Pero hay dos lenguajes que no son así: C y C++. Los lenguajes C y C a menudo simplemente permiten que se escriban datos adicionales al azar en el resto de la memoria, una situación que puede explotarse con resultados terribles.
Peor aún, escribir código correcto para manejar los desbordamientos del búfer de manera consistente tanto en C como en C es más difícil; es fácil causar accidentalmente un desbordamiento del búfer. Estos pueden ser hechos irrelevantes, excepto que C y C se usan ampliamente; por ejemplo, 86 líneas de código en Red Hat Linux 7.1 están escritas en C o C. Entonces, una gran cantidad de código es susceptible a este problema porque el lenguaje de implementación no puede proteger el código de este problema.
Enciclopedia Baidu-Overflow