¿Puede una resta dar un resultado negativo usando un número sin signo?

Esta es una pregunta interesante, porque nunca antes lo había pensado. Pero Paul tiene esencialmente razón. Si hablamos de C / C ++ u otro lenguaje que implemente el formato de complemento a dos estándar, obtendremos lo que solo puede describirse como “subflujo”.

Para hacer el ejemplo realmente simple, supongamos números de 8 bits. Restar 3 de 2 significa restar 0000 0011 de 0000 0010. A nivel de procesador, esto produce:

1111 1111

¿Por qué se produce este resultado? Debido a que restar 2 de 2 produce 0000 0000, pero restar uno más produce todos los 1, que es el efecto de “subflujo”, el reverso del desbordamiento, en el que 1111 1111 más 1 se voltea para producir 0000 0000.

El resultado, esencialmente, es -1. Si estuviéramos tratando con números con signo, esto no es problema, porque simplemente estaríamos obteniendo:

2 – 3 = -1

Pero, en lenguajes como C / C ++, también tenemos el concepto de números sin signo. Y si el patrón de bits (1111 1111) se interpreta como sin signo en lugar de con signo, se interpretará como el valor sin signo más alto posible, que en este caso es

255

  • La pregunta está equivocada. El hardware no distingue absolutamente entre sumar o restar números con o sin signo. Entran dos números, ocurre una operación de resta y sale un número. Solo hay una operación de resta, funciona con números con signo o sin signo. Puede interpretar el resultado como firmado o sin firmar. Si lo interpreta como firmado, puede ser negativo. Si lo interpreta como sin signo, 5 – 6 se verá como un número positivo muy grande.

Difiere en el almacenamiento del valor entre números con signo y sin signo. En ambos casos, cuando restamos el valor alto con el valor bajo, obtendremos un número negativo, pero el resultado que solía almacenarse en un número sin signo se convertirá en positivo al realizar la complejidad de 2.

Ejemplo:

unsigned short int a = 10, b = 11, c;
c = ab; => esto dará el resultado -1, pero c lo almacenará en forma de un entero positivo, ya que no tiene signo.
es decir, la complejidad de 2 de -1 es 65535.

No es positivo lo que quieres decir, pero la resta normal, como sin duda aprendiste en la escuela primaria, funciona así:

Deje (3) ser un número sin signo. Deje (1) ser otro número sin signo.

Luego reste (3) de (1):

(1) – (3) = -2, que es un resultado negativo con 2 números sin signo.

Esto parece demasiado trivial, entonces, ¿qué querías decir realmente?

No. Se desbordará. Si tiene variables uint32_t y calcula 2-3, obtiene 4294967295 ([matemática] 2 ^ {32} -1 [/ matemática]).

More Interesting

¿Cuál es el algoritmo para rotar una matriz bidimensional?

¿Qué tipo de problemas se pueden resolver instantáneamente en las computadoras?

¿La informática y la programación están conectadas con el pensamiento matemático?

¿Qué temas importantes en matemáticas deberían saber todos los programadores?

¿Cómo generar números aleatorios reales? He estado jugando con la función rand () en C ++. Leí de varias fuentes en línea que los generadores de números aleatorios que vienen con el paquete son bastante básicos. Hay alguna manera de corregir esto

He reprobado mucho un título de CS, pero la gran emoción de diseñar un algoritmo innovador todavía está en mí, ¿qué debo hacer?

¿Qué algoritmo debo usar para crear un solucionador de Sudoku?

¿Cuál es la mejor complejidad de tiempo que se puede lograr para las operaciones (suma, resta, multiplicación, división) en números grandes (1000 dígitos) en C ++?

¿Cuáles son las mejores universidades / facultad para un doctorado en informática teórica?

¿Qué parte de Machine Intelligence no es la optimización (por ejemplo, un proceso de decisión de Markov)?

¿Qué campo en informática es un equilibrio entre matemática y programación?

¿Hay alguna buena idea sobre cómo optimizar la biblioteca matemática fundamental del sistema?

¿Cómo amplío la importancia de la informática teórica a alguien que ha trabajado en la industria del software toda su vida?

Cómo detectar si el siguiente cuerpo de cierta longitud y altura que gira en un punto de anclaje toca una posición particular

¿Cómo ayuda la máquina de Turing a comprender la mente?