¿Cuál es la lógica detrás de la aritmética del complemento de 1 y 2?

Digamos que uno está trabajando con números binarios representados sobre n bits. Considere el número x representado en n bit binario. El complemento 1 de x no es más que ([matemáticas] 2 ^ {n} -1) -x [/ matemáticas], el complemento 2 de x no es más que [matemáticas] 2 ^ {n} -x. [/ matemáticas] ¿Por qué es así?

Tomemos un ejemplo, x = 3 yn = 4. Aquí, x = 0011. Para obtener el complemento de 1, uno simplemente resta x de 1111 y obtiene 1100. ¿Qué es 1111 aquí? Simplemente [matemáticas] 2 ^ {n} -1. [/ Matemáticas] Esto también debería explicar por qué el complemento de 2 es [matemáticas] 2 ^ {n} -x. [/mates]

De aquí en adelante, debería ser lo suficientemente claro. Encontrar el resultado [matemáticas] xy [/ matemáticas] es lo mismo que soltar el arrastre 1 (si lo hay) de (x + (complemento de 2 de y)), porque esto es lo mismo que [matemáticas] x + 2 ^ {n } -y. [/ math] Dejar caer el arrastre 1 es lo mismo que restar [math] 2 ^ {n} [/ math]. Si no hubo arrastre 1, esto significa que la respuesta que obtuvimos, ([matemática] x + 2 ^ {n} -y) <2 ^ {n}, [/ matemática] que significa que [matemática] xy [/ matemáticas] fue negativo.

Del mismo modo, se puede razonar sobre la aritmética del complemento de 1. Todos estos son solo trucos inteligentes que alguna persona ingeniosa ideó en algún momento y también se han utilizado para idear la representación binaria de los complementos de 2 en computadoras modernas: ¡por una simple razón, es extremadamente fácil implementar tal aritmética en los circuitos!

¡Espero que ayude! 😀