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
- ¿Dónde son útiles o útiles las matrices en el desarrollo de aplicaciones del mundo real?
- ¿Puedo ingresar una máquina Turing en otra máquina Turing? Si es así, ¿cómo? Y si no, ¿por qué?
- Cómo encontrar un algoritmo para encontrar tanto el mínimo como el máximo de n números usando menos de 3n / 2 comparaciones
- Siendo un estudiante de matemáticas BSc sin cursos de computación, ¿cómo puedo aprender codificación para ser competitivo?
- ¿Necesito matemáticas para programar?
¿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