Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Piensa en un Número

–Fundamentos del Sistema Binario–

Existe un juego de niños que supuestamente es para averiguar el número que alguien está pensando, no recuerdo los detalles técnicos pero mas o menos consiste en ver una serie de cartas con cifras impresas y decir si la que uno tiene en mente aparece o no en cada una. Al final el que muestra las cartas dice en voz alta la cifra oculta y todos aplauden. El sistema de este juego consiste en la numeración binaria. Esta entrada es sobre una manera sencilla de conviertir un número ‘normal’ al hermético sistema binario.
Antes de entrar en los detalles escabrosos, debo denunciar que en la carrera de ingeniería en computación de casi todas las universidades (con ‘u’ minúscula) se enseña un método que consiste en dividir el número normal entre dos y anotar el residuo, volver a dividir el cociente entre dos y anotar de nuevo el residuo y así hasta que el resultado de la división sea cero, para después voltearse y ya escribirse en binario. Este método es bueno para convertir un número ‘normal’ a otro de cualquier base, (solo hay que cambiar el divisor por la base que queramos) pero en mi opinión dicho método es demasiado tardado y complicado, no nos da información sobre desbordamientos, signos y es muy fácil equivocarse en el valor posicional.
Otra razón es que los ‘números normales’ son el patito feo en el mundo de las computadoras. Los sistemas verdaderamente importantes son el binario, el octal y el hexadecimal. Convertir números entre estos 3 sistemas es extraordinariamente sencillo y lo veremos cuando acaben de leer esta entrada. Y es mas sencillo convertir de decimal a binario que a octal o hexadecimal. El método que usaremos hoy (que no lo inventé pero es el que me funciona ) se basa en 9 pasos

1.- Si el número es mayor que 255 no puede representarse con un byte y nos vamos al demonio.
2.- Si al número le podemos restar 128, le restamos y escribimos un uno, si no se puede escribimos un cero
3.-Vemos si al resultado anterior le podemos restar 64, si es así le restamos 64 y escribimos un uno, si no se puede escribimos un cero.
4.-Vemos si al resultado anterior le podemos restar 32, si es así le restamos 32 y escribimos un uno, si no se puede escribimos un cero.
5.-Vemos si al resultado anterior le podemos restar 16, si es así le restamos 16 y escribimos un uno, si no se puede escribimos un cero.
6.-Vemos si al resultado anterior le podemos restar 8, si es así le restamos 8 y escribimos un uno, si no se puede escribimos un cero.
7.-Vemos si al resultado anterior le podemos restar 4, si es así le restamos 4 y escribimos un uno, si no se puede escribimos un cero.
8.-Vemos si al resultado anterior le podemos restar 2, si es así le restamos 2 y escribimos un uno, si no se puede escribimos un cero.
9.-Vemos si al resultado anterior le podemos restar 1, si es así le restamos 1 y escribimos un uno, si no se puede escribimos un cero.

Este es el método que conozco, restas sucesivas sobre el número a convertir, si si puede restar se escribe uno y se resta, si no se puede (o el resultado de restar es negativo) se escribe un cero. Este método escribe exactamente 8 cifras, que es el ancho de una celda de byte. Por ejemplo, el 255 arroja ocho unos, el cero una cadena de 8 ceros, etc. Para cantidades mayores a 255 se usan celdas de byte combinadas. Por ejemplo, con 2 celdas de byte tenemor 16 bits y podemos representar desde el 0 hasta el 65535, con 4 celdas tenemos 32 bits y podemos representar desde 0 hasta el 4,294,967,296. Este numerote es importante, pues la mayor parte de los datos en una PC con Windows usan enteros de 32 bits. Bueno, una nota mas en este blog. Espero que este método les sirva sobre todo a los estudiantes de primer semestre de ingeniería en computación, al menos antes de que muten en un DBA de 150 kilos. Pues si lo hacen nunca van a necesitar usar números binarios, estos solo son para los programadores de Ensamblador y uno que otro programador despistado de c.

>>>>Pasa al siguiente nivel>>>>

***Esta nota pertenece a “La Saga del Completo Principiante”*** Da click en este enlace para pasar a la siguiente entrada de esta serie.

Anuncios

diciembre 31, 2008 - Posted by | Uncategorized | , ,

8 comentarios »

  1. Buenas tardes amigo, primero gracias por tomarte el tiempo de realizar todo este trabajo, yo no soy programador pero siempre eh querido hacer juegos y ahora bueno me estoy tomando el tiempo de aprender este lenguaje, pero no escribo por eso si no para hacer algunas preguntas sobre este nivel, la explicación esta bien pero tengo una duda, cuando el resultado de la sustracción si da negativo lo tomo como un valor al que no se le puede restar el siguiente valor, porque al tratar de convertir 100 a binario me da el siguiente resultado: 00100100 y no como lo muestran en la imagen del siguiente nivel. Muchas gracias de antemano y me disculpo por mi pregunta noob.

    Comentario por juan | mayo 31, 2012 | Responder

  2. Buenas noches maestro, es impresionante la forma en que te has tomado el tiempo para enseñarnos este lenguaje tan increible, yo soy estudiante universitario y llevo la carrera de computación empresarial, he programado en otros lenguajes, pero este es único en su tipo y siempre he querido aprender a usarlo….. Mil gracias por tu aporte, sin dudas me ha servido y me seguirá sirviendo… por cierto ese metodo de conversión es mucho mejor que el de división jeje.. Sigue así

    Comentario por Marenco | agosto 8, 2012 | Responder

  3. el método que uso yo para pasar a binario-decimal/decimal-binario es el siguiente:
    pongo los numeros del 1-2-4-8-16-32-64-128…(hasta los bits que queramos) y luego a los números cuya suma entran en el rango del número buscado les pongo 1 y al resto 0….suena a rollo pero no lo es, ..un ejemplo..

    numero 100 (decimal) pasarlo a binario…

    0 0 1 0 0 1 1 0
    1 2 4 8 16 32 64 128

    porque la suma de 64+32+4=100

    para pasar un numero binario a decimal es exactamente lo mismo

    ponemos los números binarios y debajo las potencias de 2 (1, 2, 4, 8, 16….) y luego sumamos los 1

    fácil y rápido =)

    Comentario por Nel | octubre 9, 2012 | Responder

    • el orden de los bits esta alreves, primero es el bit mas alto y luego el mas bajo

      64 32 16 8 4 2 1
      1 1 0 0 1 0 0

      Comentario por b1ackpig | octubre 9, 2012 | Responder

  4. Gracias, andaba buscando esto con toda mi alma, por que quiero profundizarmen en la pc no quiero ser como los otros ingenieros que se conforman con conseguir un titulo quiero profundizar y amar mas la pc!

    Comentario por Junior | julio 31, 2014 | Responder

  5. “Si el número es mayor que 255 no puede representarse con un byte y nos vamos al demonio.” Haha en serio?
    No se demasiado de matematicas, pero si lo suficientemente bien como para decirte que si fuera mayor que 255 solo tendrias que hacer lo mismo pero por 2, ya que 2*2 = 4, 4*2 = 8, 8 * 2 = 16 (te suenan esas cifras? 2 4 8 16 32 … Los usas para explicar tu forma de pasar a binario), de todos modos, esos numeros se obtienen multiplicando el anterior por 2, es decir son potencias de 2. De todos modos voy a proponer otro metodo para pasar de una base a otra(No digo que este sea mejor, pero creo que merece la pena echarle un ojo):

    Cuando pasamos de binario a decimal multiplicamos *2 y sumamos cada vez que el digito es 1, no?
    Pero eso lo hacemos porque el decimal es para nosotros el “normal” y el binario el sistema que no entendemos.
    Entonces…¿Que pasaria si quisieramos hacerlo al reves? Es decir, de decimal a binario. Evidentemente vamos dividiendo entre 2 o restamos 2 4 8 16… pero…¿Y si desde el principio nosotros usasemos el sistema binario y fuera este sistema el “normal” para nosotros? Pues hariamos lo mismo que hacemos con el decimal: en el decimal vamos multiplicando por 2(porque el binario es de base 2) y sumamos. Entonces en binario iriamos multiplicando por 1010 (es decir, el 10 en binario), pero lo que hace que sumemos o no segun el caso es el numero con que nos encontramos en cada cifra. En binario son unos y ceros, y si lo multiplicamos significa sumar o no sumar. Pero en decimal, por ejemplo el numero 23, seria tal que asi:

    1º pasamos el 2 y el 3 a binario: el 10 y el 11
    2º mutiplicamos el 3 por 10 elevado a cero pero en binario, es decir, 11*1010^0 = 11
    3º multiplicamos el 2 por 10 elevado a 1 porque esta en la posicion 1, es decir 10*1010^1 = 10100
    4º sumamos: 10100 + 11 = 10111
    ahi esta el resultado. Se que es mas enreoso, pero es curioso que si estuviesemos acostumbrados al binario en lugar del decimal lo hariamos al reves

    Comentario por Adri | enero 17, 2016 | Responder

    • Muy interesante el asunto de las potencias de diez. Aunque sigue sin ocurrirseme un número entero mayor de 255 que pueda representarse con 8 bits. Aunque tu comentario me recuerda mucho al sistema BCD y a la manera como una unidad de punto flotante representa valores con exponentes. Mejor leo este comentario sentado y con calma.

      Aquí unos enlaces sobre el BCD y el punto flotante para que el público entienda mejor el comentario
      https://es.wikipedia.org/wiki/IEEE_coma_flotante
      https://es.wikipedia.org/wiki/Decimal_codificado_en_binario

      Comentario por asm86 | enero 20, 2016 | Responder

  6. amigos yo se que como lo explica este wey es mas facil pero mejor verlo de la parte mas complica , para mi parecer solo es un poco mas de procedimiento nada mas Aca tienen Unos ejemplos:

    Pero que pasaría si quisiera saber el número equivalente en binario al 23.456 en decimal. Tranquilo, hay un método para convertir un número decimal en binario sin hacerlo uno a uno.
    Decimal a Binario

    Para hacer la conversión de decimal a binario, hay que ir dividiendo el número decimal entre dos y anotar en una columna a la derecha el resto (un 0 si el resultado de la división es par y un 1 si es impar).

    Para sacar la cifra en binario cogeremos el último cociente (siempre será 1) y todos los restos de las divisiones de abajo arriba, orden ascendente.

    Ejemplo queremos convertir el número 28 a binario:

    28 dividimos entre 2 : Resto 0
    14 dividimos entre 2 : Resto 0
    7 dividimos entre 2 : Resto 1
    3 dividimos entre 2 : Resto 1 y cociente final 1
    28/2
    0 14/2
    0 7/2
    1 3/2
    1 1
    28=11100 en binario

    Decimal a binario

    Entonces el primer número del número equivalente en binario sería el cociente último que es 1 y su resto que es también 1, la tercera cifra del equivalente sería el resto de la división anterior que es 1, el de la anterior que es 0 y el último número que cogeríamos sería el resto de la primera división que es 0.

    Con todos estos número quedaría el número binario: 11100.

    Conclusión el número 28 es equivalente en binario al 11.100.

    Vemos como para sacar el equivalente se coge el último cociente de las operaciones y los restos que han salido en orden ascendente (de abajo arriba) 11100.

    El subíndice 2 que hemos puesto al final del número en binario, es para indicar que es un número en base 2, pero no es necesario ponerlo.

    Comentario por willianbryan | junio 24, 2017 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: