Conversão de bases numéricas
transformando a aula de hardware em um exercício de programação
Estou cursando ADS na Mackenzie, e entre as aulas, ao ver o processo para converter as bases numéricas fui buscar novas formas de fazer o processo, sem envolver uma conta extensa, ou o uso do excel, que é excelente também para fazer tabela verdade.
Pensando nisso, vendo também que existem diversos sites que faz a conversão de bases, resolvi tentar fazer um código javascript para converter bases. Considerando as opções, concluí que o processo mais fácil seria converter o numero de decimal para qualquer base. Então parti desse ponto para começar o código. Sabendo que:
Comecei um código que receberia o numero a ser convertido, a base que ele deveria receber e também receberia o resto da divisão(valor final da conversão, se invertido). Com três variáveis, escrevi uma função para dividir o valor, enquanto o valor fosse diferente de 0 e salvar numa string. E sabia que ainda precisava inverter o número, para pegar a partir do ultimo resto, e colocado da esquerda para direita.
Isso já seria suficiente, se a base octal e hexadecimal, não tivesse valores diferentes a partir do 8 e 10. Então ao final da função de divisão, chamei uma nova função converter, onde passava como parâmetro o valor final do resto e a base a ser convertida.
Nesse ponto, reparei que o resto não poderia ser uma string e sim um array, e atualizei essa questão, para poder verificar numero por numero e fazer a conversão deles sem erro.
Com esses parâmetros, dentro da função converter coloquei eles na seguinte condição, se a base fosse igual a 8 ou a base 16 eles seriam substituídos por novos valores.
Dentro das condições passei um for, para comparar os valores do array resto. Na base 8 sabia que cada numero acima de 7 e menor que 18, recebia um acréscimo de 2, então fiz o seguinte código:
A base 16 deu mais trabalho, já que a partir do 10 os números são substituídos por letras, então montei um array para as letras do hexadecimal, e fiz o seguinte código dentro do for:
O primeiro array[index] se tratava do valor do resto, e o hexadecimal[i] correspondia ao array com as letras correspondentes a cada numero. Por último já com os valores convertidos, fiz uma função especifica para virar o resultado do resto, para ficar na posição correta. com o reverse() e join(‘‘).
No fim o código completo ficou assim, você também pode consultar ele no meu github
//Alterar o número abaixo a ser convertido, e a base desejada
let numero = 162;
const base2 = 2;
const base8 = 8;
const base16 = 16;
let resto = [];
let hexadecimal = ["A", "B", "C", "D", "E", "F"];
let novaBase = "";
// Escolher a base desejada para a conversão:
//dividir(numero,base16)
dividir(numero, base8);
//dividir(numero,base2)
function dividir(valor, base) {
while (valor !== 0) {
resto.push(valor % base);
valor = parseInt(valor / base);
//console.log(valor)
//console.log("resto: "+ resto)
}
converter(resto, base);
}
function converter(array, base) {
if (base == 8) {
for (let index = 0; index < array.length; index++) {
if (array[index] >= 8 && array[index] <= 17) {
array[index] += 2;
}
}
} else if (base == 16) {
for (let index = 0; index < array.length; index++) {
if (array[index] == 10) {
array[index] = hexadecimal[0];
} else if (array[index] == 11) {
array[index] = hexadecimal[1];
} else if (array[index] == 12) {
array[index] = hexadecimal[2];
} else if (array[index] == 13) {
array[index] = hexadecimal[3];
} else if (array[index] == 14) {
array[index] = hexadecimal[4];
} else if (array[index] == 15) {
array[index] = hexadecimal[5];
} else if (array[index] == 16) {
array[index] = hexadecimal[6];
} else if (array[index] == 17) {
array[index] = hexadecimal[7];
}
}
}
virarResultado(resto, base);
}
function virarResultado(valor, base) {
novaBase = valor.reverse().join("");
console.log(numero + " na base " + base + " é: " + novaBase);
}