Professional Documents
Culture Documents
Enero 2015
Representaciones numricas
En estos apuntes se usara el posfijo b para denotar un nmero escrito en binario, d para un
nmero decimal y h para un nmero hexadecimal.
V = d i 2i ;
i =0
d i {0,1}
(1)
Ejemplo: el equivalente decimal del nmero binario 10110b se puede obtener por medio de
la tabla 1.
i
Peso
16
Dgito (di)
Dividendo
Cociente
Residuo
345
172
172
86
86
43
43
21
21
10
10
Observe que en el binario natural solo se pueden representar nmeros enteros positivos. Por
esta razn, se le conoce a esta representacin como nmeros sin signo. En todas las
computadoras se cuenta con un nmero finito de circuitos para almacenar y hacer
operaciones con dichos dgitos binarios, lo que hace que solo se pueda trabajar con
nmeros binarios de un tamao finito. Esto implica que el rango de nmeros sin signo con
los que se puede trabajar es limitado. Si una computadora utiliza N bits para representar a
los nmeros sin signo, estos N bits pueden acomodarse en 2N combinaciones diferentes.
Una de dichas combinaciones se dedica para representar al cero, por lo que solo quedan 2 N1 combinaciones para representar a otros nmeros. De esta forma, el rango de los nmeros
sin signo de N bits es de 0 a 2N-1.
Ejemplo: En la tabla 3 se muestran todas las combinaciones que se pueden formar con 3
bits y su equivalente en decimal. El rango para los nmeros sin signo de 3 bits es de 0 a 7.
Nmero binario
Equivalente decimal
000
001
010
011
100
101
110
111
Notacin hexadecimal
La notacin en binario es muy natural para implementarse en circuitos electrnicos
digitales, pero al escribirla resulta demasiado larga. Para tener una notacin ms compacta,
es muy comn usar la notacin hexadecimal. En hexadecimal la base es el numero 16. Esto
implica que se necesitan dgitos con valores equivalentes a los nmeros decimales del 10 al
15, que se representan con las letras a, b, c, d, e y f respectivamente. De manera similar al
binario, la posicin de cada dgito indica su peso, y este es la potencia correspondiente de
16. El equivalente en decimal V de un numero hexadecimal se puede encontrar mediante la
ecuacin 2.
n1
V = d i 16 i ;
i =0
d i {0 F }
(2)
considere el nmero hexadecimal A4F8h, el cual equivale al 1010 0100 1111 1000b. La
conversin de binario a hexadecimal puede lograrse agrupando los bits en grupos de cuatro
y sustituyendo cada grupo por el dgito hexadecimal correspondiente. Ejemplo: 101 0001
1101 1110b equivale a 51DEh.
Hexadecimal
Binario
Decimal
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
10
1011
11
1100
12
1101
13
1110
14
1111
15
n 2
V =d n1 2 n1 + d i 2i ;
i =0
d i {0,1}
(3)
Observe que la principal diferencia entre la ecuacin 1 y la ecuacin 3 es que el signo del
peso del bit ms significativo es negativo. Como el peso del bit ms significativo es mayor
que la suma de los pesos de los dems bits, si el bit ms significativo es uno, el nmero es
negativo y si es cero el nmero es positivo. Por esta razn al bit ms significativo se le
conoce como bit de signo. La figura 2 muestra como puede interpretarse un nmero con
signo en complemento a dos como una suma de vectores con magnitud igual al peso de
cada bit.
practico usar esta definicin para obtener el complemento a dos de un nmero binario
expresado en hexadecimal. Se aprovecha el hecho de que 2n es un uno seguido de n ceros
en binario.
Ejemplo: Represente el numero -1234d en notacin de magnitud y signo, complemento a
uno y complemento a dos en 16 bits.
Solucin: 1234d equivale a 04D2h. Para el complemento a dos, usamos la definicin:
c=216-04d2h=10000h-04D2h=FB2Eh.
Una forma rpida de calcular manualmente el complemento a dos de un nmero binario es
buscar de derecha a izquierda el primer uno y copiar la cadena hasta este uno, y a partir de
el colocar los bits restantes negados. A manera de ejemplo, el complemento a dos de
01010100b es 10101100b
La razn principal por la que la notacin de complemento a dos es la ms usada en las
computadoras modernas es que con esta notacin las operaciones de suma y resta de
nmeros con signo corresponden a las operaciones de suma y resta de nmeros sin signo
descartando cualquier acarreo que pudiera generarse, como muestran los siguientes
ejemplos:
(+3) 0011
+ (+2) 0010
(+5) 0101
(-3) 1101
+ (-2) 1110
(-5) 11011
(-5) 1011
+ (+3) 0011
(-2) 1110
(+7) 0111
+ (-5) 1011
(+2) 10010
La figura 3 muestra una recta numrica con los nmeros binarios de 3 bits interpretados
como nmeros con y sin signo. En ella se puede observar que si se suma 1 al 111b y se
descarta el acarreo, se obtiene el 000b. Por esta razn es que el 111b corresponde al -1 en
tres bits. El hecho de que al hacer una operacin de suma o resta con un numero fijo de bits
se obtiene otro nmero con el mismo nmero de bits, se puede interpretar tambin como si
la tradicional recta numrica se convirtiera en un circulo numrico, donde se pasa de un
extremo a otro igual que en una hoja de papel enrollada. El circulo numrico
correspondiente a los nmeros binarios de cuatro bits se muestra en la figura 4.
Lo anterior implica que cuando se utiliza aritmtica con un nmero finito de bits, las
operaciones que tengan un resultado que requiera de ms bits para representarse tendrn un
resultado errneo. Se llama acarreo cuando se interpreta a los operandos como nmeros sin
signo y el resultado de una suma no pertenece al rango de nmeros que se puede
representar con el nmero de bits que se esta utilizando. En el caso de una resta se le
conoce como prstamo. Cuando el resultado de una suma o resta de nmeros interpretados
como con signo en complemento a dos se sale del rango que se puede representar con la
cantidad de bits que se esta usando, se dice que ocurri un sobreflujo (Overflow en Ingls).
Los procesadores modernos sealan la ocurrencia de estas condiciones mediante registros
de un bit llamados banderas. Usualmente una bandera indica la existencia de acarreo o
prestamo (CF) y otra la de sobreflujo (OF). Adems de estas banderas, es comn encontrar
otra bandera que almacena una copia del bit de signo de resultado (SF Sign Flag) y otra que
indica si el resultado fue cero o no (ZF Zero Flag).
111
110
101
100
011
010
001
000
-1
111
Sin signo
-2
110
-3
101
-4
100
Con signo
-1
Nmeros
negativos
1111
-2
+1
0001
1110
+2
0010
-3
+3
1101
Incremento
-4
-5
0011
1100
0100
1011
+4
Incremento
0101
+5
1010
-6
0110
1001
-7
1000
-8
0111
+7
+6
Nmeros positivos
Ejempo: Calcule el resultado de las suma de DEA3h y BABEh, e indique el valor que
tomaran las banderas de acarreo, signo, cero y sobreflujo despus la suma. Usando una
calculadora capaz de sumar en hexadecimal, el resultado es 19961h. Como se esta
trabajando con 16 bits, el bit extra se descarta del resultado, pero se guarda en la bandera de
acarro, de modo que el resultado en 16 bits es 9961h y cf=1. El bit 15 del resultado es 1,
por lo que SF=1 y el resultado es negativo. Zf es 0 ya que el resultado es distinto de cero.
Finalmente, para determinar el valor de la bandera de sobreflujo, se revisa si se cumple con
la ley de los signos de la adicin. El primer sumando es negativo, al igual que el segundo.
La suma de dos sumandos negativos debe ser negativa. Como dijimos anteriormente, el
resultado es negativo y al cumplirse la ley de los signos de la suma, sabemos que no hay
sobreflujo y que OF=0.
Ejercicios: Calcule el resultado de las siguientes operaciones e indique el valor que tendran
las banderas de acarreo (cf), signo (sf), cero (zf) y sobreflujo (of) despus de ejecutarse
dichas operaciones.
a)ACDEh
b)56CAh c)E567h
d)6234h
+9876h
+4321h 6234h
E567h
Tipo de dato de C
char
unsigned char
short [int]
unsigned short [int]
int
unsigned [int]
long [int]
unsigned long [int]
long long [int]
unsigned long long [int]
Mnimo
Mximo
-127
127
255
-32,767
32,767
64,535
-32,767
32,767
64,535
-2,147,483,647
2,147,483,647
4,294,967,295
-9,223,372,036,854,775,807
9,223,372,036,854,775,807
18,446,744,073,709,551,615
0100 1111
1001 1110
Datos multibyte
La mayora de las computadoras tienen localidades de memoria de un byte (8 bits) de
ancho. Cuando se requiere almacenar ms de un byte, lo que se hace es utilizar ms de una
localidad de memoria. Existen dos ordenes en que se pueden almacenar estos datos. El
primer orden es comenzar por almacenar el byte menos significativo del nmero que se
desea almacenar en la localidad de direccin ms baja. Por ejemplo, si se desea almacenar
el nmero de diecisis bits ABCDh a partir de la localidad de direccin 100h, se debe
almacenar CDh en la localidad 100h y ABh en la localidad 101h. Este ordenamiento se
conoce como little endian. El orden alternativo, es decir, almacenando el byte ms
significativo en la localidad de direccin ms baja, es conocido como big endian. La
figura 5 muestra como se almacena el nmero de treinta y dos bits 12345678h siguiendo
tanto el orden little endian como el big endian. Little endian es el orden ms usado en
la actualidad, tanto en las computadoras personales modernas con procesadores
compatibles con Intel, como en muchos microcontroladores.