Download Programacion-I-SisNum-2

Document related concepts

Sistema octal wikipedia , lookup

Código binario wikipedia , lookup

Sistema binario wikipedia , lookup

Sistema hexadecimal wikipedia , lookup

Sistema de numeración wikipedia , lookup

Transcript
Java-Apen-C 3/31/01 12:26 PM Page 1195
C
Sistemas
numéricos
Objetivos
• Comprender los conceptos acerca de los sistemas numéricos
como base, valor posicional y valor simbólico.
• Aprender a trabajar con los números representados en los
sistemas numéricos binario, octal y hexadecimal.
• Aprender a abreviar los números binarios como octales o
hexadecimales.
• Aprender a convertir los números octales y hexadecimales en
binarios.
• Aprender a realizar conversiones hacia y desde números
decimales y sus equivalentes en binario, octal y hexadecimal.
• Comprender el funcionamiento de la aritmética binaria y la
manera en que se representan los números binarios negativos,
utilizando la notación de complemento a dos.
He aquí sólo los números ratificados.
William Shakespeare
La naturaleza tiene un cierto tipo de sistema de coordenadas
aritméticas-geométricas, ya que cuenta con todo tipo de modelos.
Lo que experimentamos de la naturaleza está en los modelos, y
todos los modelos de la naturaleza son tan bellos.
Se me ocurrió que el sistema de la naturaleza debe ser una
verdadera belleza, porque en la química encontramos que las
asociaciones se encuentran siempre en hermosos números enteros;
no hay fracciones.
Richard Buckminster Fuller
Java-Apen-C 3/31/01 12:26 PM Page 1196
1196
Sistemas numéricos
Apéndice C
Plan general
C.1
C.2
C.3
C.4
C.5
C.6
Introducción
Abreviatura de los números binarios como números octales y hexadecimales
Conversión de números octales y hexadecimales a binarios
Conversión de un número binario, octal o hexadecimal a decimal
Conversión de un número decimal a binario, octal o hexadecimal
Números binarios negativos: Notación de complemento a dos
Resumen • Terminología • Ejercicios de autoevaluación • Respuestas a los ejercicios de autoevaluación • Ejercicios
C.1 Introducción
En este apéndice presentaremos los sistemas numéricos clave que utilizan los programadores de Java, especialmente cuando trabajan en proyectos de software que requieren de una estrecha interacción con el hardware “a
nivel de máquina”. Entre los proyectos de este tipo están los sistemas operativos, el software de redes computacionales, los compiladores, sistemas de bases de datos y aplicaciones que requieren de un alto rendimiento.
Cuando escribimos un entero, como 227 o –63, en un programa de Java, se asume que el número está en
el sistema numérico decimal (base 10). Los dígitos en el sistema numérico decimal son 0, 1, 2, 3, 4, 5, 6, 7, 8
y 9. El dígito más bajo es el 0 y el más alto es el 9 (uno menos que la base, 10). En su interior, las computadoras utilizan el sistema numérico binario (base 2). Este sistema numérico sólo tiene dos dígitos: 0 y 1. El dígito
más bajo es el 0 y el más alto es el 1 (uno menos que la base, 2).
Como veremos, los números binarios tienden a ser mucho más extensos que sus equivalentes decimales.
Los programadores que trabajan con lenguajes ensambladores y en lenguajes de alto nivel como Java, que les
permiten llegar hasta el “nivel de máquina”, encuentran que es complicado trabajar con números binarios. Por
eso existen otros dos sistemas numéricos, el sistema numérico octal (base 8) y el sistema numérico hexadecimal (base 16), que son populares debido a que permiten abreviar los números binarios de una manera conveniente.
En el sistema numérico octal, los dígitos utilizados son del 0 al 7. Debido a que tanto el sistema numérico
binario como el octal tienen menos dígitos que el sistema numérico decimal, sus dígitos son los mismos que
sus correspondientes en decimal.
El sistema numérico hexadecimal presenta un problema, ya que requiere de dieciséis dígitos: el dígito más
bajo es 0 y el más alto tiene un valor equivalente al 15 decimal (uno menos que la base, 16). Por convención
utilizamos las letras de la A a la F para representar los dígitos hexadecimales que corresponden a los valores
decimales del 10 al 15. Por lo tanto, en hexadecimal podemos tener números como el 876, que consisten solamente de dígitos similares a los decimales; números como 8A55F que consisten de dígitos y letras; y números
como FFE que consisten solamente de letras. En ocasiones un número hexadecimal puede coincidir con una
palabra común como FACE o FEED (en inglés); esto puede parecer extraño para los programadores acostumbrados a trabajar con números. Los dígitos de los sistemas numéricos binario, octal, decimal y hexadecimal se
sintetizan en las figuras C.1 y C.2.
Cada uno de estos sistemas numéricos utilizan la notación posicional: cada posición en la que se escribe
un dígito tiene un valor posicional distinto. Por ejemplo, en el número decimal 937 (el 9, el 3 y el 7 se conocen como valores simbólicos) decimos que el 7 se escribe en la posición de las unidades; el 3, en la de las decenas; y el 9, en la de las centenas. Observe que cada una de estas posiciones es una potencia de la base (10) y
que estas potencias empiezan en 0 y aumentan de 1 en 1 a medida que nos desplazamos hacia la izquierda por
el número (figura C.3).
Para números decimales más extensos, las siguientes posiciones a la izquierda serían: de millares (10 a la
tercera potencia), de decenas de millares (10 a la cuarta potencia), de centenas de millares (10 a la quinta potencia), de los millones (10 a la sexta potencia), de decenas de millones (10 a la séptima potencia), y así sucesivamente.
Java-Apen-C 3/31/01 12:26 PM Page 1197
Apéndice C
Sistemas numéricos
Dígito binario
Dígito octal
Dígito decimal
Dígito hexadecimal
0
0
0
0
1
1
1
1
2
2
2
3
3
3
4
4
4
5
5
5
6
6
6
7
7
7
8
8
9
9
1197
A (valor de 10 en decimal)
B (valor de 11 en decimal)
C (valor de 12 en decimal)
D (valor de 13 en decimal)
E (valor de 14 en decimal)
F (valor de 15 en decimal)
Figura C.1 Dígitos de los sistemas numéricos binario, octal, decimal y hexadecimal.
Atributo
Binario
Octal
Decimal
Hexadecimal
Base
2
8
10
16
Dígito más bajo
0
0
0
0
Dígito más alto
1
7
9
F
Figura C.2 Comparación de los sistemas binario, octal, decimal y hexadecimal.
Valores posicionales en el sistema numérico decimal
Dígito decimal
9
3
7
Nombre de la posición
Centenas
Decenas
Unidades
Valor posicional
100
10
1
Valor posicional como
potencia de la base (10)
102
101
100
Figura C.3 Valores posicionales en el sistema numérico decimal.
En el número binario 101 decimos que el 1 más a la derecha se escribe en la posición de los unos, el 0 se
escribe en la posición de los dos y el 1 de más a la izquierda se escribe en la posición de los cuatros. Observe
que cada una de estas posiciones es una potencia de la base (2) y que estas potencias empiezan en 0 y aumentan de 1 en 1 a medida que nos desplazamos hacia la izquierda por el número (figura C.4).
Para números binarios más extensos, las siguientes posiciones a la izquierda serían la posición de los ochos
(2 a la tercera potencia), la posición de los dieciséis (2 a la cuarta potencia), la posición de los treinta y dos (2 a
la quinta potencia), la posición de los sesenta y cuatros (2 a la sexta potencia), y así sucesivamente.
Java-Apen-C 3/31/01 12:26 PM Page 1198
1198
Sistemas numéricos
Apéndice C
Valores posicionales en el sistema numérico binario
Dígito binario
1
0
Nombre de la posición
Cuatros
Dos
Unos
Valor posicional
4
2
1
Valor posicional como
potencia de la base (2)
22
21
20
1
Figura C.4 Valores posicionales en el sistema numérico binario.
Valores posicionales en el sistema numérico octal
Dígito octal
4
2
5
Nombre de la posición
Sesenta y cuatros
Ochos
Unos
Valor posicional
64
8
1
Valor posicional como
potencia de la base (8)
82
81
80
Figura C.5 Valores posicionales en el sistema numérico octal.
Valores posicionales en el sistema numérico hexadecimal
Dígito hexadecimal
3
D
A
Nombre de la posición
Doscientos
cincuenta y seis
Dieciséis
Unos
Valor posicional
256
6
1
Valor posicional como
potencia de la base (16)
162
161
160
Figura C.6 Valores posicionales en el sistema numérico hexadecimal.
En el número octal 425, decimos que el 5 se escribe en la posición de los unos, el 2 se escribe en la posición
de los ochos y el 4 se escribe en la posición de los sesenta y cuatros. Observe que cada una de estas posiciones
es una potencia de la base (8) y que estas potencias empiezan en 0 y aumentan de 1 en 1 a medida que nos desplazamos hacia la izquierda por el número (figura C.5).
Para números octales más extensos, las siguientes posiciones a la izquierda sería la posición de los quinientos doces (8 a la tercera potencia), la posición de los cuatro mil noventa y seis (8 a la cuarta potencia), la posición de los treinta y dos mil setecientos sesenta y ochos (8 a la quinta potencia), y así sucesivamente.
En el número hexadecimal 3DA, decimos que la A se escribe en la posición de los unos, la D se escribe en
la posición de los dieciséis y el 3 se escribe en la posición de los doscientos cincuenta y seis. Observe que cada
una de estas posiciones es una potencia de la base (16) y que estas potencias empiezan en 0 y aumentan de 1
en 1 a medida que nos desplazamos hacia la izquierda por el número (figura C.6).
Para números hexadecimales más extensos, las siguientes posiciones a la izquierda serían la posición de
los cuatro mil noventa y seis (16 a la tercera potencia), la posición de los sesenta y cinco mil quinientos treinta
y seis (16 a la cuarta potencia), y así sucesivamente.
Java-Apen-C 3/31/01 12:26 PM Page 1199
Apéndice C
Sistemas numéricos
1199
C.2 Abreviatura de los números binarios
como números octales y hexadecimales
En computación, el uso principal de los números octales y hexadecimales es para abreviar representaciones binarias demasiado extensas. La figura C.7 muestra que los números binarios extensos pueden expresarse más
concisamente en sistemas numéricos con bases mayores que en el sistema numérico binario.
Una relación especialmente importante que tienen tanto el sistema numérico octal como el hexadecimal
con el sistema binario es que las bases de los sistemas octal y hexadecimal (8 y 16, respectivamente) son potencias de la base del sistema numérico binario (base 2). Considere el siguiente número binario de 12 dígitos y
sus equivalentes en octal y hexadecimal. Vea si puede determinar cómo esta relación hace que sea conveniente el abreviar los números binarios en octal o hexadecimal. La respuesta sigue después de los números.
Número binario
100011010001
Equivalente en octal
4321
Equivalente en hexadecimal
8D1
Para convertir fácilmente el número binario en octal, sólo divida el número binario de 12 dígitos en grupos de tres bits consecutivos y escriba esos grupos por encima de los dígitos correspondientes del número octal, como se muestra a continuación:
100
4
011
3
010
2
001
1
Observe que el dígito octal que escribió debajo de cada grupo de tres bits corresponde precisamente al
equivalente octal de ese número binario de 3 dígitos que se muestra en la figura C.7.
El mismo tipo de relación puede observarse al convertir números de binario a hexadecimal. Divida el número binario de 12 dígitos en grupos de cuatro bits consecutivos y escriba esos grupos por encima de los dígitos correspondientes del número hexadecimal, como se muestra a continuación:
1000
8
1101
D
0001
1
Observe que el dígito hexadecimal que escribió debajo de cada grupo de cuatro bits corresponde precisamente al equivalente hexadecimal de ese número binario de 4 dígitos que se muestra en la figura C.7.
Número decimal
0
Representación binaria
Representación octal
Representación hexadecimal
0
0
0
1
1
1
1
2
10
2
2
3
11
3
3
4
100
4
4
5
101
5
5
6
110
6
6
7
111
7
7
8
1000
10
8
9
1001
11
9
10
1010
12
A
11
1011
13
B
12
1100
14
C
13
1101
15
D
14
1110
16
E
15
1111
17
F
16
10000
20
10
Figura C.7 Equivalentes en decimal, binario, octal y hexadecimal.
Java-Apen-C 3/31/01 12:26 PM Page 1200
1200
Sistemas numéricos
Apéndice C
C.3 Conversión de números octales y hexadecimales a binarios
En la sección anterior vimos cómo convertir números binarios a sus equivalentes en octal y hexadecimal, formando grupos de dígitos binarios y simplemente volviéndolos a escribir como sus valores equivalentes en dígitos octales o hexadecimales. Este proceso puede utilizarse en forma inversa para producir el equivalente en
binario de un número octal o hexadecimal.
Por ejemplo, el número octal 653 se convierte en binario simplemente escribiendo el 6 como su equivalente binario de 3 dígitos 110, el 5 como su equivalente binario de 3 dígitos 101 y el 3 como su equivalente binario de 3 dígitos 011 para formar el número binario de 9 dígitos 110101011.
El número hexadecimal FDA5 se convierte en binario simplemente escribiendo la F como su equivalente
binario de 4 dígitos 1111, la A como su equivalente binario de 4 dígitos 1010, la D como su equivalente binario de 4 dígitos 1101 y el 5 como su equivalente binario de 4 dígitos 0101, para formar el número binario de
16 dígitos 1111101011010101.
C.4 Conversión de un número binario, octal o hexadecimal a decimal
Como estamos acostumbrados a trabajar con el sistema decimal, a menudo es conveniente convertir un número binario, octal o hexadecimal en decimal para tener una idea de lo que “realmente” vale el número. Nuestros
diagramas en la sección C.1 expresan los valores posicionales en decimal. Para convertir un número en decimal desde otra base, multiplique el equivalente en decimal de cada dígito por su valor posicional y sume estos
productos. Por ejemplo, el número binario 110101 se convierte en el número 53 decimal, como se muestra en
la figura C.8.
Para convertir el número 7614 octal en el número 3980 decimal utilizamos la misma técnica, esta vez utilizando los valores posicionales apropiados para el sistema octal, como se muestra en la figura C.9.
Para convertir el número AD3B hexadecimal en el número 44347 decimal utilizamos la misma técnica, esta vez empleando los valores posicionales apropiados para el sistema hexadecimal, como se muestra en la figura C.10.
C.5 Conversión de un número decimal a binario, octal o hexadecimal
Las conversiones de la última sección siguen naturalmente las convenciones de la notación posicional. Las conversiones de decimal a binario, octal o hexadecimal también siguen estas convenciones.
Suponga que queremos convertir el número 57 decimal en binario. Empezamos escribiendo los valores posicionales de las columnas de derecha a izquierda, hasta llegar a una columna cuyo valor posicional sea mayor
que el número decimal. Como no necesitamos esa columna, podemos descartarla. Por lo tanto, primero escribimos:
Valores posicionales:
64
32
16
8
4
2
1
Luego descartamos la columna con el valor posicional de 64, dejando:
Valores posicionales:
32
16
8
4
2
1
A continuación, empezamos a trabajar desde la columna más a la izquierda y nos vamos desplazando hacia la derecha. Dividimos 57 entre 32 y observamos que hay un 32 en 57, con un residuo de 25, por lo que es-
Conversión de un número binario en decimal
Valores posicionales:
32
16
8
4
2
1
Valores simbólicos:
1
1
0
1
0
1
Productos:
1*32=32
1*16=16
0*8=0
1*4=4
0*2=0
1*1=1
Suma:
= 32 + 16 + 0 + 4 + 0 + 1 = 53
Figura C.8 Conversión de un número binario en decimal.
Java-Apen-C 3/31/01 12:26 PM Page 1201
Apéndice C
Sistemas numéricos
1201
Conversión de un número octal en decimal
Valores posicionales:
512
64
8
1
Valores simbólicos:
7
6
1
4
Productos:
7*512=3584
6*64=384
1*8=8
4*1=4
Suma:
= 3584 + 384 + 8 + 4 = 3980
Figura C.9 Conversión de un número octal en decimal.
Conversión de un número hexadecimal en decimal
Valores posicionales:
4096
256
16
1
Valores simbólicos:
A
D
3
B
Productos:
A*4096=40960
D*256=3328
3*16=48
B*1=11
Suma:
= 40960 + 3328 + 48 + 11 = 44347
Figura C.10 Conversión de un número hexadecimal en decimal.
cribimos 1 en la columna de los 32. Dividimos 25 entre 16 y observamos que hay un 16 en 25, con un residuo
de 9, por lo que escribimos 1 en la columna de los 16. Dividimos 9 entre 8 y observamos que hay un 8 en 9
con un residuo de 1. Las siguientes dos columnas producen el cociente de cero cuando se divide 1 entre sus valores posicionales, por lo que escribimos 0 en las columnas de los 4 y de los 2. Por último, 1 entre 1 es 1, por
lo que escribimos 1 en la columna de los 1. Esto nos da:
Valores posicionales:
Valores simbólicos:
32
1
16
1
8
1
4
0
2
0
1
1
y por lo tanto, el 57 decimal es equivalente al 111001 binario.
Para convertir el número decimal 103 en octal, empezamos por escribir los valores posicionales de las columnas hasta llegar a una columna cuyo valor posicional sea mayor que el número decimal. Como no necesitamos esa columna, podemos descartarla. Por lo tanto, primero escribimos:
Valores posicionales:
512
64
8
1
Luego descartamos la columna con el valor posicional de 512, lo que nos da:
Valores posicionales:
64
8
1
A continuación, empezamos a trabajar desde la columna más a la izquierda y nos vamos desplazando hacia la derecha. Dividimos 103 entre 64 y observamos que hay un 64 en 103 con un residuo de 39, por lo que
escribimos 1 en la columna de los 64. Dividimos 39 entre 8 y observamos que el 8 cabe cuatro veces en 39 con
un residuo de 7, por lo que escribimos 4 en la columna de los 8. Por último, dividimos 7 entre 1 y observamos
que el 1 cabe siete veces en 7 y no hay residuo, por lo que escribimos 7 en la columna de los 1. Esto nos da:
Valores posicionales:
Valores simbólicos:
64
1
8
4
1
7
y por lo tanto, el 103 decimal es equivalente al 147 octal.
Para convertir el número decimal 375 en hexadecimal, empezamos por escribir los valores posicionales de
las columnas hasta llegar a una columna cuyo valor posicional sea mayor que el número decimal. Como no necesitamos esa columna, podemos descartarla. Por consecuencia, primero escribimos:
Valores posicionales:
4096
256
16
1
Luego descartamos la columna con el valor posicional de 4096, lo que nos da:
Java-Apen-C 3/31/01 12:26 PM Page 1202
1202
Sistemas numéricos
Valores posicionales:
Apéndice C
256
16
1
A continuación, empezamos a trabajar desde la columna más a la izquierda y nos vamos desplazando hacia la derecha. Dividimos 375 entre 256 y observamos que 256 cabe una vez en 375 con un residuo de 119, por
lo que escribimos 1 en la columna de los 256. Dividimos 119 entre 16 y observamos que el 16 cabe siete veces en 119 con un residuo de 7, por lo que escribimos 7 en la columna de los 16. Por último, dividimos 7 entre 1 y observamos que el 1 cabe siete veces en 7 y no hay residuo, por lo que escribimos 7 en la columna de
los 1. Esto produce:
Valores posicionales:
Valores simbólicos:
256
1
16
7
1
7
y por lo tanto, el 375 decimal es equivalente al 177 hexadecimal.
C.6 Números binarios negativos: Notación de complemento a dos
La discusión en este apéndice se ha enfocado hasta ahora en números positivos. En esta sección explicaremos
cómo las computadoras representan números negativos mediante el uso de la notación de complementos a dos.
Primero explicaremos cómo se forma el complemento a dos de un número binario y después mostraremos por
qué representa el valor negativo de dicho número binario.
Considere una máquina con enteros de 32 bits. Suponga que se ejecuta la siguiente instrucción:
int valor = 13;
La representación en 32 bits de valor es:
00000000 00000000 00000000 00001101
Para formar el negativo de valor, primero formamos su complemento a uno aplicando el operador de complemento a nivel de bits de Java (~):
complementoAUnoDeValor = ~valor;
Internamente, ~valor es ahora valor con cada uno de sus bits invertidos; los unos se convierten en ceros y
los ceros en unos, como se muestra a continuación:
valor:
00000000 00000000 00000000 00001101
~valor (es decir, el complemento a uno de valor):
11111111 11111111 11111111 11110010
Para formar el complemento a dos de valor, simplemente sumamos uno al complemento a uno de valor.
Por lo tanto:
El complemento a dos de valor es:
11111111 11111111 11111111 11110011
Ahora, si esto de hecho es igual a –13, deberíamos poder sumarlo al 13 binario y obtener como resultado 0.
Comprobemos esto:
00000000 00000000 00000000 00001101
+11111111 11111111 11111111 11110011
-----------------------------------00000000 00000000 00000000 00000000
El bit de acarreo que sale de la columna que está más a la izquierda se descarta y evidentemente obtenemos cero como resultado. Si sumamos el complemento a uno de un número a ese mismo número, todos los dígitos del
resultado serían iguales a 1. La clave para obtener un resultado en el que todos los dígitos sean cero es que el complemento a dos es 1 más que el complemento a 1. La suma de 1 hace que el resultado de cada columna sea 0
y se acarrea un 1. El acarreo sigue desplazándose hacia la izquierda hasta que se descarta en el bit que está más
a la izquierda, con lo que todos los dígitos del número resultante son iguales a cero.
En realidad, las computadoras realizan una suma como:
x = a - valor;
Java-Apen-C 3/31/01 12:26 PM Page 1203
Apéndice C
Sistemas numéricos
1203
mediante la suma del complemento a dos de valor con a, como se muestra a continuación:
x = a + (~valor + 1 );
Suponga que a es 27 y que valor es 13 como en el ejemplo anterior. Si el complemento a dos de valor es
en realidad el negativo de éste, entonces al sumar el complemento de dos de valor con a se produciría el resultado de 14. Comprobemos esto:
a (es decir, 27)
+(~valor + 1)
00000000 00000000 00000000 00011011
+11111111 11111111 11111111 11110011
-------------------------------------00000000 00000000 00000000 00001110
lo que ciertamente da como resultado 14.
RESUMEN
• Cuando escribimos un entero como 19, 227 o –63, en un programa de Java, suponemos que el número se encuentra en el
sistema numérico decimal (base 10). Los dígitos en el sistema numérico decimal son 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9. El dígito
más bajo es el 0 y el más alto es el 9 (uno menos que la base, 10).
• En su interior, las computadoras utilizan el sistema numérico binario (base 2). Este sistema numérico sólo tiene dos dígitos: 0 y 1. El dígito más bajo es el 0 y el más alto es el 1 (uno menos que la base, 2).
• El sistema numérico octal (base 8) y el sistema numérico hexadecimal (base 16) son populares debido a que permiten abreviar los números binarios de una manera conveniente.
• Los dígitos que se utilizan en el sistema numérico octal son del 0 al 7.
• El sistema numérico hexadecimal presenta un problema, ya que requiere de dieciséis dígitos: el dígito más bajo es 0 y el
más alto tiene un valor equivalente al 15 decimal (uno menos que la base, 16). Por convención utilizamos las letras de la
A a la F para representar los dígitos hexadecimales que corresponden a los valores decimales del 10 al 15.
• Cada uno de estos sistemas numéricos utilizan la notación posicional: cada posición en la que se escribe un dígito tiene
un distinto valor posicional.
• Una relación especialmente importante que tienen tanto el sistema numérico octal como el hexadecimal con el sistema binario es que las bases de los sistemas octal y hexadecimal (8 y 16, respectivamente) son potencias de la base del sistema
numérico binario (base 2).
• Para convertir un número octal en binario, sustituya cada dígito octal con su equivalente binario de tres dígitos.
• Para convertir un número hexadecimal en binario, simplemente sustituya cada dígito hexadecimal con su equivalente binario de cuatro dígitos.
• Como estamos acostumbrados a trabajar con el sistema decimal, es conveniente convertir un número binario, octal o hexadecimal en decimal para tener una idea de lo que “realmente” vale el número.
• Para convertir un número en decimal desde otra base, multiplique el equivalente en decimal de cada dígito por su valor
posicional y sume estos productos.
• Las computadoras representan números negativos mediante el uso de la notación de complementos a dos.
• Para formar el negativo de un valor en binario, primero formamos su complemento a uno aplicando el operador de complemento a nivel de bits de Java (~): Esto invierte los bits del valor. Para formar el complemento a dos de un valor, simplemente sumamos uno al complemento a uno de ese valor.
TERMINOLOGÍA
base
conversiones
dígito
notación de complementos a dos
notación de complementos a uno
notación posicional
operador de complemento a nivel de
bits (~)
sistema numérico binario
sistema numérico de base 2
sistema numérico de base 8
sistema numérico de base 10
sistema numérico de base 16
sistema numérico decimal
sistema numérico hexadecimal
sistema numérico octal
valor negativo
valor posicional
valor simbólico
Java-Apen-C 3/31/01 12:26 PM Page 1204
1204
Sistemas numéricos
Apéndice C
EJERCICIOS DE AUTOEVALUACIÓN
C.1
Las bases de los sistemas numéricos decimal, binario, octal y hexadecimal son
y
, respectivamente.
C.2
En general, las representaciones en decimal, octal y hexadecimal de un número binario dado contienen (más/menos) dígitos de los que contiene el número binario.
C.3
(Verdadero/falso.) Una de las razones populares de utilizar el sistema numérico decimal es que forma una notación
conveniente para abreviar números binarios, en la que simplemente se sustituye un dígito decimal por cada grupo
de cuatro dígitos binarios.
C.4
La representación (octal/hexadecimal/decimal) de un valor binario grande es la más concisa (de las alternativas
dadas).
C.5
(Verdadero/falso.) El dígito de mayor valor en cualquier base es uno más que la base.
C.6
(Verdadero/falso.) El dígito de menor valor en cualquier base es uno menos que la base.
C.7
El valor posicional del dígito que se encuentra más a la derecha en cualquier número, ya sea binario, octal, decimal o hexadecimal es siempre
.
C.8
El valor posicional del dígito que está a la izquierda del dígito que se encuentra más a la derecha en cualquier número, ya sea binario, octal, decimal o hexadecimal es siempre igual a
.
C.9
Complete los valores que faltan en esta tabla de valores posicionales para las cuatro posiciones que están más a la
derecha en cada uno de los sistemas numéricos indicados:
decimal
hexadecimal
binario
octal
1000
...
...
512
100
256
...
...
10
...
...
8
,
,
1
...
...
...
C.10
Convierta el número binario 110101011000 en octal y en hexadecimal.
C.11
Convierta el número hexadecimal FACE en binario.
C.12
Convierta el número octal 7316 en binario.
C.13
Convierta el número hexadecimal 4FEC en octal. (Sugerencia: Primero convierta el número 4FEC en binario y después convierta el número resultante en octal.)
C.14
Convierta el número binario 1101110 en decimal.
C.15
Convierta el número octal 317 en decimal.
C.16
Convierta el número hexadecimal EFD4 en decimal.
C.17
Convierta el número decimal 177 en binario, en octal y en hexadecimal.
C.18
Muestre la representación binaria del número decimal 417. Después muestre el complemento a uno de 417 y el
complemento a dos del mismo número.
C.19
¿Cuál es el resultado cuando se suma el complemento a uno de un número con ese mismo número?
RESPUESTAS A LOS EJERCICIOS DE AUTOEVALUACIÓN
C.1
10, 2, 8, 16.
C.2
Menos.
C.3
Falso.
C.4
Hexadecimal.
C.5
Falso. El dígito de mayor valor en cualquier base es uno menos que la base.
C.6
Falso. El dígito de menor valor en cualquier base es cero.
C.7
1 (La base elevada a la potencia de cero).
C.8
La base del sistema numérico.
C.9
Complete los valores que faltan en esta tabla de valores posicionales para las cuatro posiciones que están más a la
derecha en cada uno de los sistemas numéricos indicados:
decimal
hexadecimal
1000
4096
100
256
10
16
1
1
Java-Apen-C 3/31/01 12:26 PM Page 1205
Apéndice C
binario
octal
Sistemas numéricos
8
512
4
64
2
8
C.10
6530 octal; D58 hexadecimal.
C.11
1111 1010 1100 1110 binario.
C.12
111 011 001 110 binario.
C.13
0 100 111 111 101 100 binario; 47754 octal.
C.14
2+4+8+32+64=110 decimal.
C.15
7+1*8+3*64=7+8+192=207 decimal.
C.16
4+13*16+15*256+14*4096=61396 decimal.
C.17
177 decimal
en binario:
1205
1
1
256 128 64 32 16 8 4 2 1
128 64 32 16 8 4 2 1
(1*128)+(0*64)+(1*32)+(1*16)+(0*8)+(0*4)+(0*2)+(1*1)
10110001
en octal:
512 64 8 1
64 8 1
(2*64)+(6*8)+(1*1)
261
en hexadecimal:
256 16 1
16 1
(11*16)+(1*1)
(B*16)+(1*1)
B1
C.18
Binario:
512 256 128 64 32 16 8 4 2 1
256 128 64 32 16 8 4 2 1
(1*256)+(1*128)+(0*64)+(1*32)+(0*16)+(0*8)+(0*4)+(0*2)+
(1*1)
110100001
Complemento a uno: 001011110
Complemento a dos: 001011111
Comprobación: Número binario original + su complemento a dos:
C.19
110100001
001011111
--------000000000
Cero.
EJERCICIOS
C.20
Algunas personas argumentan que muchos de nuestros cálculos se realizarían más fácilmente en el sistema numérico de base 12, ya que el 12 puede dividirse por muchos más números que el 10 (por la base 10). ¿Cuál es el dígito de menor valor en la base 12? ¿Cuál podría ser el símbolo con mayor valor para un dígito en la base 12? ¿Cuáles son los valores posicionales de las cuatro posiciones más a la derecha de cualquier número en el sistema numérico de base 12?
C.21
¿Cómo se relaciona el símbolo con mayor valor en los sistemas numéricos que hemos descrito con el valor posicional del primer dígito a la izquierda del dígito que se encuentra más a la derecha de cualquier número en estos
sistemas numéricos?
Java-Apen-C 3/31/01 12:26 PM Page 1206
1206
Sistemas numéricos
C.22
Complete la siguiente tabla de valores posicionales para las cuatro posiciones más a la derecha en cada uno de los
sistemas numéricos indicados:
decimal
base 6
base 13
base 3
1000
...
...
27
Apéndice C
100
...
169
...
10
6
...
...
1
...
...
...
C.23
Convierta el número binario 100101111010 en octal y en hexadecimal.
C.24
Convierta el número hexadecimal 3A7D en binario.
C.25
Convierta el número hexadecimal 765F en octal. (Sugerencia: Primero conviértalo en binario y después convierta
el número resultante en octal.)
C.26
Convierta el número binario 1011110 en decimal.
C.27
Convierta el número octal 426 en decimal.
C.28
Convierta el número hexadecimal FFFF en decimal.
C.29
Convierta el número decimal 299 en binario, en octal y en hexadecimal.
C.30
Muestre la representación binaria del número decimal 779. Después muestre el complemento a uno de 779 y el
complemento a dos del mismo número.
C.31
¿Cuál es el resultado cuando se suma el complemento a dos de un número con ese mismo número?
C.32
Muestre el complemento a dos del valor entero –1 en una máquina con enteros de 32 bits.