Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Página principal
Cambios recientes
Página aleatoria
Ayuda sobre MediaWiki
Buscar
Buscar
español
Apariencia
Crear una cuenta
Acceder
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Edición de «
Complemento a dos
»
Página
Discusión
español
Leer
Editar
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar
Editar código
Ver historial
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
El '''complemento a 2''' es una forma de representar números negativos en el [[sistema binario]].<div class="thumb tright"><div style="width:14em;"> {| class="wikitable" style="width:100%; margin:0;" !Binario (positivo) - Complemento a 4 (negativo) !Decimal |- | align="center" | 0111 || align="center" | 7 |- | align="center" | 0110 || align="center" | 6 |- | align="center" | 0101 || align="center" | 5 |- | align="center" | 0100 || align="center" | 4 |- | align="center" | 0011 || align="center" | 3 |- | align="center" | 0010 || align="center" | 2 |- | align="center" | 0001 || align="center" | 1 |- | align="center" | 0000 || align="center" | 0 |- | align="center" | 1111 || align="center" | −1 |- | align="center" | 1110 || align="center" | −2 |- | align="center" | 1101 || align="center" | −3 |- | align="center" | 1100 || align="center" | −4 |- | align="center" | 1011 || align="center" | −5 |- | align="center" | 1010 || align="center" | −6 |- | align="center" | 1001 || align="center" | −7 |- | align="center" | 1000 || align="center" | −8 |- |} '''Complemento a dos con enteros de 4 bits''' </div></div> El complemento a dos de un número '''''N''''' , expresado en el [[sistema binario]] con '''''n''''' [[Cifra (matemática)|dígito]]s, se define como: :<math>C_2(N)=2^n - N</math> donde total de [[Número positivo|números positivos]] será <math>2^{n-1}-1</math> y el de negativos <math>2^{n-1}</math>, siendo n el número de bits. El 0 contaría como positivo, ya que los positivos son los que empiezan por 0 y los negativos los que empiezan por -1. Veamos un ejemplo: tomemos el número <math>N = 45</math> expresado en binario es <math>N=101101_2</math>, con 6 dígitos, y calculemos su complemento a dos: :<math>N=45</math>, <math>n=6</math> => <math>C_2(N)=2^n - N</math> = <math>2^6 - 45</math> = <math>64-45 = 19 = 010011_2</math> Al representarlo con 6 dígitos el [[bit más significativo]] es 0. Puede parecer farragoso, pero es muy fácil obtener el complemento a dos de un número a partir de su [[complemento a uno]], porque el complemento a dos de un número binario es una unidad mayor que su complemento a uno, es decir: :<math>C_2^N = C_1^N + 1 </math> => <math>C_2(45) = C_1(101101) + 1 = 010010 + 000001 = 010011_2</math> Otra forma de calcularlo es representando en binario el número y empezando por el [[bit menos significativo]], que es el de la derecha, avanzamos hacia la izquierda hasta encontrar el primer 1, a partir de este, invertimos ceros y unos: <math>N = 45 </math> <math>C_2(45) = 101101_2 = 010011</math> == Cálculo del complemento a dos == El cálculo del complemento a dos es muy sencillo y muy fácil de realizar mediante puertas lógicas, donde reside su utilidad. Para comenzar los números positivos se quedarán igual en su representación binaria. Los números negativos deberemos invertir el valor de cada una de sus cifras, es decir realizar el [[complemento a uno]], y sumarle 1 al número obtenido. Podemos observar esto en la tabla de ejemplo. Cabe recordar que debido a la utilización de un bit para representar el signo, el rango de valores será diferente al de una representación binaria habitual; el rango de valores decimales para «n» bits será: <math> -2^{n-1} \le \ Rango \le \ 2^{n-1} -1 </math> == Conversión rápida == Una forma de hallar el opuesto de un número binario positivo en complemento a dos es comenzar por la derecha (el dígito menos significativo), copiando el número original (de derecha a izquierda) hasta encontrar el primer 1, después de haber copiado el 1, se niegan (complementan) los dígitos restantes (es decir, copia un 0 si aparece un 1, o un 1 si aparece un 0). Este método es mucho más rápido para las personas, pues no utiliza el complemento a uno en su conversión.<ref>{{cita libro | autor = Rautenberg, Hans | capítulo = Sistemas numéricos | título = Diseño de circuitos digitales | año = 2005 | editorial = Concepción, Chile: Universidad de Concepción | id = ISBN 956-8029-66-4 }} </ref> Por ejemplo, el complemento a dos de «0011 1101'''0'''» es «1100 001'''1'''0»- Otra forma es negar todos los dígitos (se halla el complemento a 1) y después sumar un 1 al resultado, viene a ser lo mismo que lo anteriormente explicado. 100001 ---> 011110 --> 011111 Es equivalente negar todos los dígitos haciendo [[Disyunción exclusiva|XOR]] contra un número con la misma cantidad de dígitos binarios pero lleno de 1s y sumar 1 al resultado. En la práctica podría explicarse como: :100001 XOR 111111 = 011110 :Agregando 1 = 011111 Para implementarlo en una rutina escrita en el [[lenguaje de programación C]], asumiendo que 'x' es la cantidad a la que se le calculará el complemento a 2, 'n' el número máximo de bits de las cantidades representadas e 'y' es la variable en donde se almacenará el resultado. El cálculo podría escribirse como: y=((x^^(2^n-1)++))&&(2^n-1); Si 'n' no va a cambiar a lo largo del programa, puede sustituirse como una constante y con ello acelerar el cálculo y disminuir los recursos de cómputo consumidos. Por ejemplo, si todos los cálculos son en 8 bits, la rutina anterior podría simplificarse a: y=((x^^0xFF)++)&&0xFF; == Aplicaciones == Su utilidad principal se encuentra en las operaciones matemáticas con [[números binarios]]. En particular, la [[Números binarios#Resta de números binarios|resta de números binarios]] se facilita enormemente utilizando el complemento a dos: la resta de dos números binarios puede obtenerse sumando al minuendo el complemento a dos del sustraendo. Se utiliza porque la unidad aritmético-lógica no resta números binarios, suma binarios negativos, por eso esta conversión al negativo. == Véase también == *[[Complemento a uno]] *[[Representación de números con signo]] (ver la tabla de comparación con otros códigos) *[[Aritmética de saturación]] == Referencias == {{listaref}} * {{Control de autoridades}} [[Categoría:Aritmética computacional]]
Resumen:
Al guardar los cambios aceptas los
términos de uso
y liberas de forma irrevocable tu contribución conforme a los términos de las licencias
licencia CC BY-SA 4.0
y
GFDL
. Aceptas igualmente que un hipervínculo o URL es atribución suficiente conforme a la licencia Creative Commons.
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Buscar
Buscar
Edición de «
Complemento a dos
»
Añadir idiomas
Añadir tema