Introducción aos Sistemas de Numeración
A Información e a Súa Representación.
Para transmitir información (comunicarse) é necesario utilizar un conxunto de símbolos para representala. Por exemplo, a linguaxe escrita é unha representación da información que se quere transmitir utilizando como símbolos as distintas letras do alfabeto. Este conxunto de símbolos mestúranse seguindo unhas normas, constituindo un código. Outros códigos empregados habitualmente para transmitir información son os distintos idiomas falados que combinan sons, o código morse, ... etc.
Os ordenadores son dispositivos electrónicos que empregan para codificar a información dous valores de tensión eléctricas distintos, utilizando polo tanto dous símbolos para representar información. Os sistemas que utilizan dous símbolos para representar información chámanse sistemas binarios, e cada un dos símbolos chámase bit. Para representar a información mediante estes dous símbolos existen diversos códigos como o código ASCII. De aqui en diante empregaremos o símbolo 1 para referirnos a un dos valores de tensión e 0 para o outro.
O código ASCII é un código de 8 bits que asina a cada combinación posible unha letra, excepto os 32 primeiros que se corresponden con ordenes especiais (como saltar unha páxina, saltar de liña ou emitir un pito). Evidentemente non hai tantas letras, as combinacións sobrantes representan outros símbolos que resultarán de utilidade (como @, &, %, $ ... etc).
Para almacenar información os ordenadores dispoñen dunha memoria que consiste nunha serie de 'celas' capaces de manter un dos dous valores de tensión posibles, almacenando asi un símbolo (0 ou 1). Estas celas están agrupadas en conxuntos de 8, recibindo o nome de byte. Cada byte ten unha dirección numérica que o distingue dos demais de xeito que o ordenador é capaz de identificar o byte de memoria ó que quere acceder para almacenar ou ler valores. Este número que identifica os bytes de memoria chámase dirección de memoria. Deste xeito para almacenar letras na memoria se almacena en realidade o código ASCII de 8 bits correspondente, por exemplo para almacenar a letra '1', almacénase o número 49 codificado en binario.
Convén ter en conta neste punto a distinción entre a información que estamos a representar e o código empregado para facelo. Por exemplo o número 49 almacenado na memoria pode significar cousas distintas segundo o código que esteamos a empregar: Si estamos almacenando un número codificado en binario, a información almacenada é o número 49, pero si o que estamos almacenando é un código ASCII dunha letra estaremos almacenando a letra '1'.
A misión dos ordenadores é o tratamento de información. O ordenador dispón dun xogo de instruccións que é capaz de levar a cabo sobre a información. Estas instruccións teñen un código binario asinado, de xeito que se poden almacenar na memoria. O conxunto de instruccións en binario que entende o ordenador e as regras para combinalas constituen a linguaxe máquina ou código máquina. O ordenador limítase a cargar da memoria as instruccións e levalas a cabo.
Un conxunto de instruccións almacenados na memoria para realizar un tratamento de información concreto chámase programa. Podemos dicir polo tanto que a misión dos ordenadores é executar programas.
Nunca debemos perder de vista (por obvio que pareza) que un ordenador é unha máquina, e como tal non razoa, pensa ou fai algo pola súa conta, somos nós os que temos que saber o que estamos a almacenar na memoria e interpretaremos de forma axeitada os números que lemos da memoria escribindo os programas do xeito adecuado. Informacións distintas poden ser codificadas utilizando o mesmo número binario, para saber o significado da información almacenada é necesario saber que código se utilizou (binario, ASCII, BCD ... etc).
Unha gran ventaxa do sistema binario é que e moi simple construir circuitos electrónicos que realicen operacións lóxicas (AND, OR, NOT, XOR) e aritméticas (fundamentalmente sumas e restas) utilizando o sistema binario.
Como veremos, as operacións matemáticas que se poden realizar non dependen do sistema de numeración empregado.
Os Sistemas de Numeración.
Para representar os números normalmente empréganse dez símbolos distintos (0, 1, 2, 3, 4, 5, 6, 7, 8 e 9), o que constitúe un sistema de numeración decimal. Estes dez símbolos combínanse entre si con obxecto de representar os distintos números. Cómpre salientar que nós estamos demasiado afeitos ó sistema decimal, de xeito que identificamos a representación decimal dos números cos propios números. Isto non é así, os números poden ser representados de formas moi diversas constituindo sistemas de numeración completamente equivalentes ó sistema decimal.
O número de símbolos utilizados para representar os números constitúe a base de numeración empregada.
De esta forma é posible representar os números utilizando só dous símbolos distintos (0 e 1, de menor a maior), o que constitúe un sistema de numeración binario, ou dezaseis (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F de menor a maior) que sería un sistema de numeración hexadecimal. A forma de representar os números e realizar operacións nas distintas bases de numeración deriva da combinación dos seus símbolos de unha forma ordenada do mesmo xeito que se fai no sistema decimal:
000, 001, 002, 003, 004, 005, 006, 007, 008, 009 (xa que rematei os símbolos, combino con o 1 de segundo) 010, 011, 012, 013, 014, 015, 016, 017, 018, 019 (o rematar as combinacións con o 1, paso a combinar con o 2) 020, 021, 022, .... etc.
Se nos fixamos, o cambio do símbolo que ocupa a primeira posición pola dereita faise cada nova combinación, polo tanto o valor numérico do símbolo é 1*valor do símbolo (unidade), o cambio do símbolo que ocupa a segunda posición prodúcese cada 10 combinacións, polo tanto o valor numérico do símbolo é 10*valor do símbolo (decena), o da terceira posición cada 100 combinacións (centena) .... etc. Si o que estamos usando é un sistema binario, temos dous símbolos:
000, 001 (rematei os símbolos, combino con o 1 de segundo) 010, 011 (rematei os símbolos, combino con o 1 de terceiro) 100, 101, 110, 111
O cambio do símbolo que ocupa a primeira posición pola dereita faise cada nova combinación, o seu valor é 1*valor do símbolo, o símbolo da segunda posición cambia cada dúas combinacións, polo tanto o seu valor é 2*valor do símbolo, o que ocupa a terceira posición cambia cada catro combinacións, así que o seu valor é 4*valor do símbolo.... etc.
En xeral, para calcular o valor numérico dunha expresión en unha base de numeración concreta, multiplícase o valor de cada símbolo pola base de numeración empregada elevada a posición ocupada polo mesmo (comezando pola dereita e considerando a primeira posición coma posición 0) e súmanse todos os resultados.
Polas mesmas razóns expostas anteriormente, para atopar a expresión que representa un número decimal en unha base de numeración calquera, divídese o número decimal entre a base na que se quere representar tantas veces como se poida (división enteira) . A expresión resultante sairá tomando de esquerda a dereita o cociente da última división e tódolos restos anteriores representados nos símbolos correspondentes á nova base.
Como medio de acelerar a conversión entre decimal e binario, fundamental nos ordenadores, resulta moi práctico representar as sucesivas potencias de 2:
256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Colocando os 1 de forma que a suma dos números de arriba coincidan co valor decimal que queremos representar en binario e o resto a 0, conseguiremos o número en binario. Ademais, colocando un número en binario e sumando os valores correspondentes cos 1, teremos o valor decimal dun número binario.
Para poder facer restas é necesario poder representar os números negativos. Para facer isto elixiuse un código chamado complemento a 2, que consiste en cambiar os 0 por 1 e os 1 por 0 (complemento a 1) e sumarlle 1 ó resultado. Deste xeito obsérvase que a metade das representacións deberían corresponder a números positivos e a outra metade a números negativos. Por convenio, suponse que os números negativos son os que comezan por 1, chamandose o bit mais a esquerda bit de signo.
De novo convén recordar que nos somos os responsables de saber que é o que estamos a almacenar na memoria. Si estamos a almacenar números sen signo (todos positivos) o significado do número almacenado na memoria é completamente distinto que si estamos almacenando números con signo, aínda que o número almacenado sexa o mesmo.
O sistema hexadecimal é tamén moi usado, xa que permite imaxinarse fácilmente o número en binario e, o mesmo tempo, representalo dunha forma moi breve. Para pasar un número hexadecimal a binario únicamente é necesario converter individualmente cada símbolo do número hexadecimal a 4 bits. Para pasar un número en binario a hexadecimal, agruparánse os díxitos binarios de 4 en 4 dende a dereita (completando o último grupo con 0 si é necesario) e convértese cada grupo de 4 bits ó seu símbolo hexadecimal correspondente.
Aínda que os números enteiros se almacenan en memoria en código binario e posible codificalos de outras maneiras como o código BCD (cada díxito por separado en binario ocupando 1 byte) ou BCD empaquetado (cada díxito en binario por separado pero almacenando en 1 byte dous díxitos codificando cada díxito en 4 bits).
Os números decimais represéntanse utilizando códigos de coma flotante definidos por estándares internacionais, aínda que tamén e posible utilizar códigos con coma fixa. En xeral distinguiremos tres formas de representar os números: números enteiros sen signo, números enteiros con signo e números decimais (coma flotante)
As Operacións Lóxicas.
Ademáis de operacións aritméticas o ordenador tamén é capaz de realizar operacións lóxicas como comparacións (en realidade unha resta), ou as tres operacións lóxicas básicas:
- AND: Da como resultado 1 (certo) si os dous operandos son 1, en outro caso o resultado será 0 (falso).
- OR: Para que o resultado sexa 1 (certo) basta con que un dos dous operandos o sexa.
- NOT: Actúa cun só operando, si o operando é 1 (certo), o resultado será 0 (falso). Si o operando é 0 o resultado será 1.
- Outra operación moi utilizada é a XOR, que dá como resultado 1 (certo) só si os operandos son distintos (un deles é 1 e o outro 0).