Você está na página 1de 18

29/9/2014 Curso de Lgica da Programao

http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 1/18
Incio Cursos Blog A Empresa Contato

Curso de Lgica da Programao na
Prtica.
Sistemas de
Numerao.
No incio deste curso dissemos que
computadores s entendem
informaes em nmeros binrios,
hexadecimais ou octais.
Agora teremos a oportunidade de
conhecer mais a fundo esses sistemas de
numerao, inclusive aprenderemos
como realizada a converso entre eles.
Alm dos nmeros decimais, binrios,
hexadecimais e octais, tambm
teremos uma introduo aos cdigos
ASCII, que so uma padronizao para
os caracteres dos teclados de
computadores.
Nmeros decimais
Nmeros decimais so os que estamos
acostumados a lidar na Matemtica
convencional. Tambm so conhecidos
como nmeros de base 10. Isso porque
compreendem dez smbolos numricos:
os nmeros 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9.
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 2/18
Atravs da combinao desses dez
nmeros possvel representar todos os
nmeros decimais.
Quando um nmero decimal lido da
direita para a esquerda, a primeira
posio do mesmo representada pelo
nmero 0. A posio do prximo nmero
da esquerda para a direita
representada pelo nmero 1 e assim por
diante. Por exemplo, vejamos isso com o
nmero 26802:
O sistema decimal baseado em
potncias de 10. Levando em conta a
figura acima que mostra como
realizada a identificao da coluna do
nmero, em um sistema decimal cada
nmero definido pela soma de cada
algarismo multiplicado por 10 elevado
potncia correspondente coluna do
mesmo:
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 3/18
Agora que vimos uma tabela detalhando
como funcionam os nmeros decimais,
vejamos mais alguns exemplos:
E assim por diante...
Nmeros binrios.
Nmeros binrios so os mais
importantes em computao. Quando
falamos que computadores atuais so
digitais, significa que processam os
dados no formato binrio.
Nmeros binrios tambm so
conhecidos como nmeros de base 2.
Compreendem somente dois caracteres:
o 0 e o 1.
Quando um nmero binrio lido da
direita para a esquerda, assim como com
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 4/18
os nmeros decimais, sua posio
colunar inicial considerada 0. O
prximo dgito mais esquerda
considerado de posio 1 e assim por
diante, como na figura:
Os nmeros binrios so baseados em
potncias de 2 e, de forma semelhante
aos nmeros decimais, podem ser
definidos pela soma de cada algarismo
multiplicado por 2 (que a sua base)
elevado potncia que corresponde
coluna correspondente do mesmo:
Para ficar bem claro, seguem mais alguns
exemplos:
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 5/18
Cada dgito de um nmero binrio
conhecido como bit. Nos exemplos da
figura acima temos um nmero binrio
de 4 bits.
Para mensurar a capacidade de
processamento de um computador assim
como a capacidade de armazenamento
utilizado o conceito de byte
(representado pela letra B maiscula).
Um byte equivale a aproximadamente 8
bits e representado pela letra b
minscula. Um bit pode ser
representado somente por duas
entidades: ou um dgito 0 ou um dgito
1.
Um caracter digitado no teclado tem,
aproximadamente, 8 bits.
Quando falamos que um byte equivale a
aproximadamente 8 bits, estamos
tratando da mensurao dos bytes que
temos contato no dia-a-dia. Por exemplo,
vejamos uma tabela que relaciona bits e
bytes:
byte
(B)
Correspondncia
em bytes
bit (b)
Correspondncia
em bits
Potncia
1 byte 1 byte 8 bits 8 bits
2
0
1 kB 1.024 bytes 8 kb 8.192 bits
2
10
1 MB 1.048.576 bytes 8.192 kb 8.388.608 bits
2
20
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 6/18
1 GB 1.073.741.824
bytes
8.388.608 kb 8.589.934.592 bits
2
30
1 TB
1.099.511.627.776
bytes
8.589.934.592
kb
8.796.093.022.208
bits
2
40
fcil de constatar isso no irb:
Tambm possvel verificar a
multiplicao de bytes por 8 para achar o
valor em bits:
No teste acima no precisamos dos
parnteses pois o operador de
exponenciao tem maior precedncia
que o operador de multiplicao.
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 7/18
Tabela ASCII
Os caracteres que digitamos no teclado,
indiferentemente se so letras ou
nmeros, primeiro so convertidos em
um cdigo chamado ASCII que
corresponde a um nmero inteiro
decimal. Em seguida so convertidos em
nmeros binrios, compostos somente
por "zeros" e "uns". Dessa forma o
processador pode realizar os clculos e
retornar um valor.
ASCII um acrnimo para American
Standard Code for Information
Interchange, que em portugus significa
"Cdigo Padro Americano para o
Intercmbio de Informao". Define 128
caracteres, sendo 33 no imprimveis
(utilizados como caracteres de controle).
Os caracteres no imprimveis vo do 1
ao 31, alm do 128. Ou seja, os
caracteres imprimveis vo do 32 ao 126.
Lembra-se quando vimos os caracteres
de "escape"? Vimos, por exemplo, o
"\t". Esses caracteres fazem parte dos
caracteres de controle da tabela ASCII. O
"\t" o caracter 9 na tabela ASCII, e
um caracter considerado de controle, no
imprimvel.
Voc pode encontrar centenas de sites na
internet que mostram a tabela ASCII
completa.
Mas, que tal verificarmos o cdigo ASCII
de um caracter no Ruby? fcil, veja:
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 8/18
Nesse teste simples, a String "abcde"
foi atribuda varivel str. Em seguida,
foi chamada a varivel informando um
ndice da String, que comea em 0 da
esquerda para a direita.
Dessa forma, atravs do mtodo ord
mostrado o cdigo ASCII correspondente
primeira letra da esquerda para a
direita, ou seja, o a. O cdigo da posio
1 referente letra b e assim por
diante.
O contrrio tambm possvel, graas ao
mtodo .chr:
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 9/18
Hum... com os conhecimentos que j
temos de loops, podemos fazer um
programa que mostre os caracteres e seu
cdigo ASCII correspondente. Acho que
um desafio interessante. Os caracteres
ASCII imprimveis comeam no 32 e vo
at o 126. Vejamos como seria um
programa bem simples que mostra os
caracteres e seu cdigo ASCII:
# encoding: iso-8859-1
for ascii in 32..126 do
puts "O cdigo ASCII do caracter #{ascii.chr} : #{ascii}"
end
No programa acima utilizamos um loop
for que atravessa um range de valores
que vai de 32 at 126. Dentro do loop
utilizada a interpolao para mostrar o
resultado, primeiro utilizando o mtodo
chr e depois a varivel que contm o
nmero da vez.
Testando o programa:
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 10/18
# encoding: iso-8859-1
for ascii in 32..126 do
puts "O cdigo ASCII do caracter #{ascii.chr} : #{ascii}"
end
Uau! muito mais legal do que ficar
fazendo tabelas com cdigos ASCII!
Cdigo ASCII de caracteres em
Java
Tambm possvel encontrar facilmente
o cdigo ASCII de caracteres em Java.
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 11/18
Vejamos este pequeno programa:
public class MostraAscii {
public static void main (String[] args) {
String nome = "Marcos";
for (int i = 0; i < nome.length(); i++) {
int ascii = (int)nome.charAt(i);
char letra = nome.charAt(i);
System.out.println("Cdigo ASCII da letra " + letra + " = " + ascii);
}
}
}
Testando o mesmo:
Agora ao contrrio, convertendo de
ASCII em String:
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 12/18
public class AsciiChar {
public static void main (String[] args) {
int[] numeros = {98, 99, 100, 101, 102, 103};
for (int i = 0; i < numeros.length; i++) {
char caracter = (char)numeros[i];
System.out.println("Caracter ASCII do nmero " + numeros[i] + " = " + caracter);
}
}
}
Testando o programa:
Mostrando toda a tabela ASCII com todos
os caracteres imprimveis:
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 13/18
public class TabelaAscii {
public static void main (String[] args) {
for (int i = 32; i <= 126; i++) {
char caracter = (char)i;
System.out.println("Caracter ASCII do nmero " + i + " = " + caracter);
}
}
}
Note que no programa acima, dentro das
condies do loop for, a varivel de
controle foi inicializada em 32, para que
fossem mostrados somente os caracteres
imprimveis, e terminando em 126, que
o ltimo caracter imprimvel.
Compilando e rodando o programa:
Ok, j conhecemos os nmeros decimais
e binrios, j sabemos mensurar bytes e
bits e conhecemos um pouco da tabela
ASCII.
Nmeros Hexadecimais
Os nmeros hexadecimais so
conhecidos como de base 16 e so
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 14/18
utilizados na programao de
microprocessadores. Oferecem uma
forma mais legvel para leitura, e, por
isso, so muito utilizados em
programao de baixo nvel, por
proporcionar uma facilidade em converter
um nmero binrio de 4 bits.
Utilizam-se de dezesseis algarismos, ou
dgitos hexadecimais: 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, A, B, C, D, E e F.
Os nmeros hexadecimais tm a
capacidade de reduzir uma longa
sequncia de nmeros binrios em
poucos caracteres, pois qualquer
combinao de nmeros binrios de 4
dgitos pode ser representada por um
nico smbolo hexadecimal.
Vejamos uma tabela que compara
nmeros decimais, binrios e
hexadecimais para realizarmos uma
comparao:
Decimal Binrio Hexadecimal
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 15/18
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
Vejamos uma figura que ilustra a
utilizao da base 16 em um nmero
hexadecimal:
Note que o dgito "C" do nmero
hexadecimal foi substitudo pelo seu
correspondente (12) na tabela acima.
Nmeros Octais
Tambm conhecido como sistema
numrico de base 8, pois utiliza 8
smbolos numricos para sua
representao: 1, 2, 3, 4, 5, 6, 7 e 8.
Foi muito utilizada em computao para
representar de forma mais suscinta
nmeros binrios, mas os nmeros
hexadecimais so mais utilizados para
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 16/18
esta finalidade nos dias de hoje.
Similar aos nmeros decimais e binrios,
utiliza a posio colunar como elemento
para determinao do expoente.
Dessa forma, um nmero octal segue
normas parecidas com os nmeros
decimais e binrios no que se refere
exponenciao:
Vejamos uma tabela comparativa entre
Decimais, Binrios, Hexadecimais e
Octais:
Decimal Binrio Hexadecimal Octal
0 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
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 17/18
Voltar
8 1000 8 10
9 1001 9 11
10 1010 A 12
11 1011 B 13
12 1100 C 14
13 1101 D 15
14 1110 E 16
15 1111 F 17
Na prxima lio vamos aprender a
converter nmeros decimais em binrios
e vice-versa:
Prximo: Converso Entre
Bases Numricas.
Lies
Captulo 1
Captulo 2
Captulo 3
Captulo 4
Captulo 5
Captulo 6
Captulo 7
Registros (Arquivos)
Mtodos (Funes)
Algoritmos com Mtodos
Recursividade
29/9/2014 Curso de Lgica da Programao
http://www.activeinfo.com.br/curso_programacao/sistemas_de_numeracao.html 18/18
Sistemas de Numerao
Converso Entre Bases Numricas
IP Decimal para Binrio
IP Binrio para Decimal
Desenvolvido por:
Marcos Cesar Kossoski

Interesses relacionados