Logo Hardware.com.br
dbatista
dbatista Tô em todas Registrado
1.8K Mensagens 96 Curtidas

Cálculos IP - Decimal x Hexadecimal

#1 Por dbatista 17/07/2014 - 15:04
Boa tarde pessoal.

Bem, se postei na sala errada, façam como os juízes da copa, economizem cartões.

É o seguinte:

Estou fazendo algumas revisões e uma delas é para converter binários, decimal e hexadecimal. Pois bem. Para todos eles achei muita matéria nas buscas, algumas me deram até raiva para o nível de complexidade para explicar algo relativamente simples.
http://pt.wikipedia.org/wiki/Convers%C3%A3o_entre_sistemas_num%C3%A9ricos
Resumindo: para converter um decimal em binário é fácil, é um grupo de 8 dígitos começando da esquerda por 128 e terminando em 1 na direita, enfim. Agora, para calcular de decimal para hexa e vice-versa, vi umas fórmulas desnecessárias e notei que simplesmente tornando o decimal em binário e o hexa em binário, chega-se muito mais rápido ao resultado.


Há alguma controversa nisso?
Um abraço.
Obrigado, Deus.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
quemsou_naodigo
quemsou_naod... Cyber Highlander Registrado
28.8K Mensagens 1.8K Curtidas
#2 Por quemsou_naod...
18/07/2014 - 11:14
Não entendi a sua dúvida.
Você pode fazer isso do jeito que você quiser.
Eu, particularmente, prefiro transformar decimal em binário e de binário para hexadecimal. (separando grupos de quatro bits).

Mas no dia-a-dia ninguém faz isso na mão, é só jogar na calculadora.
Leiam: Guia de Utilização (Novo Fórum) e Regras de Conduta.
---------------------------------------------
LinuxUser #468957
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#3 Por jqueiroz
18/07/2014 - 18:58
dbatista disse:
Resumindo: para converter um decimal em binário é fácil, é um grupo de 8 dígitos começando da esquerda por 128 e terminando em 1 na direita, enfim. Agora, para calcular de decimal para hexa e vice-versa, vi umas fórmulas desnecessárias e notei que simplesmente tornando o decimal em binário e o hexa em binário, chega-se muito mais rápido ao resultado.


Há alguma controversa nisso?
Um abraço.


A conversão pode ser feita direto, desde que você saiba como. Por exemplo, para converter um número de decimal para hexadecimal, vc só precisa fazer divisões sucessivas desse número para 16, pegando os restos, que serão os dígitos do número convertido, até que o quociente seja menor do que 16. No final, o número convertido será formado pelos restos, na ordem inversa que você os calculou. Sempre que um dos valores for maior do que 9, use os dígitos A-F para representar os valores entre 10 e 15.

Hein? espantado.png:

Calma, vamos ver um exemplo. 12347 (decimal).

12347 dividido por 16, dá 771, resto 11.
771 dividido por 16 dá 48, resto 3.
48 por 16 dá 3, resto zero.
3 é menor que 16, terminou a conversão.

O resultado da conversão, então, é "3 0 3 B" (hexadecimal).

Em binário faz-se a mesma coisa... apenas como o divisor é pequeno, leva muitas divisões pra encontrar todos os dígitos de um número grande. E os restos das divisões serão sempre zero ou um.

Por exemplo, o número 177.
Dividido por 2, dá 88, resto 1.
88 por 2 dá 44, resto 0.
44 por 2 dá 22, resto 0.
22 por 2 dá 11, resto 0.
11 por 2 dá 5, resto 1.
5 por 2 dá 2, resto 1.
2 por 2 dá 1, resto 0.
1 é menor que 2.

Resultado da conversão: "1 0 1 1 0 0 0 1".

Esse processo converte qualquer número decimal, de qualquer tamanho, para qualquer base.

Só que as conversões mais comuns são entre decimal e binário (e vice-versa), ou entre decimal e hexadecimal. E além disso, é comum que os números sendo convertidos sejam limitados pela quantidade de bits (ou dígitos) do resultado.

Por exemplo, nos endereços de rede do IPv4, usa-se a Notação Decimal Pontuada, onde o endereço (32 bits) é dividido em 4 grupos de 8 (octetos), que são convertidos em decimal, e escritos separados por pontos. E muitas vezes você tem apenas a notação decimal pontuada de um endereço, e precisa fazer alguma operação com ele, por exemplo determinar a qual rede esse endereço pertence, dada uma determinada máscara; e para isso é necessário convertê-lo de volta em binário. Nesse caso, há um método mais rápido, que é o descrito por você, e que se baseia em saber que o número pode ser expresso em 8 bits.

Nesse método, compara-se o número com 2^7 (128). Caso o número seja maior ou igual a 128, escreve-se um bit "1" no resultado e subtrai-se 128 do número; caso contrário, escreve-se um bit "0". Em seguida, o número é comparado com 2^6 (64), 2^5 (32), 2^4 (16), 2^3 (8), 2^2 (4), 2^1 (2) e 2^0 (1). Isso gera cada um dos bits, na mesma ordem em que são escritos (e não em ordem inversa, como o método anterior).

Voltando ao exemplo do 177... 177 é maior ou igual a 128 (1). 177 menos 128, 49.
49 >= 64? Não (0).
49 >= 32? Sim (1). 49-32 = 17.
17 >= 16? Sim (1). 17-16 = 1.
1 >= 8? Não (0).
1 >= 4? Não (0).
1 >= 2? Não (0).
1 >= 1? Sim (1).

Resultado: "1 0 1 1 0 0 0 1". Como já sabíamos.

A passagem de hexadecimal de/para binário, como vc disse, é muito simples, pois é feita por tabela. Cada dígito hexadecimal corresponde a 4 bits, e o melhor: sempre o mesmo padrão de bits. Assim, há uma tabela de conversão entre um e outro.

Realmente, para quem está acostumado a converter entre decimal e binário, a conversão para hexadecimal pode ser mais fácil se primeiro se converter para binário, e depois usar a tabela de conversão.

Mas... assim como há o método de atalho para binário, também há um para hexadecimal, mas que exige um pouco mais de memória (não a do computador, a sua). Basta que você decore os múltiplos de 16 até um determinado valor.

Funciona assim: eu quero converter o número 230 decimal em hexadecimal. Eu sei que o múltiplo de 16 mais próximo de 230 é 224, que é 13x16. 230-224=6. O número convertido então é "B 6". Leva tempo pra aprender a fazer, mas é muito mais rápido que converter pra binário e aplicar a tabela. Aliás, rápido ao ponto de valer a pena fazer o contrário: converter pra hexadecimal assim, e aplicar a tabela pra obter o binário correspondente (que, no caso, é "11010110").
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal