Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
November 15, 2021 05:08 pm GMT

Binrios!

Em um dos meus posts anteriores, dei uma explicao sobre Charset e tambm sobre Codificao, que voc pode conferir aqui. Relembrando: charset a tabela que relaciona uma determinada numerao com um caractere (entre elas a tabela ASCII, UTF-16, etc.), possibilitando que o computador leia e escreva palavras, e codificao o processo de transformar essa numerao em binrio. Porm, o assunto dos nmeros binrios pode gerar dvida em muita gente, afinal, por qu binrio? Por qu tudo em baixo nvel binrio?

Antes de mais nada, o binrio no muito diferente de decimal, sendo que o que diferencia um do outro a base utilizada. Decimal utiliza base 10 na representao e operaes dos nmeros, enquanto o binrio utiliza a base 2. Assim, os nmeros so representados como uma sequncia de 0 e 1, enquanto em base 10 os nmeros so representados com os numerais de 0 a 9.

Podemos utilizar qualquer base para representar os nmeros. Em computao, comumente utilizamos o hexadecimal, que com base 16.
Nesse sistema, os nmeros de 0 a 9 so representados com numerais mesmo. Do 10 ao 15, j so representados com letra de A a F. Alguns erros que o Windows produz retorna uma numerao hexadecimal (que seria um endereo de memria), e, inclusive, o algoritmo de hash SHA-1 produz um nmero em hexadecimal para cada documento que passado para ele (confira mais aqui)

Erro no Windows
Acho que temos um pouco mais de base para entender o porqu de alguns erros do Windows terem essa numerao estranha

O Javascript mesmo uma linguagem que aceita converses com limite de base 36, isso porque existem 10 numerais e 26 letras do alfabeto.

O mtodo toString() analisa seu primeiro argumento e tenta retornar uma representao string na raiz (base) especificada. Para raizes maiores que 10, as letras do alfabeto indicam valores maiores que 9. Por exemplo, para nmeros hexadecimais (base 16), letras entre a e f so utilizadas.
Se o radix no for especificado, a raiz assumida como preferencial a 10.

Fonte: MDN Docs

Dito isso, para facilitar entender um sistema numeral de base 2, acredito que convm entender um tipo primitivo de dado: o Boolean.

O Boolean implementado na maioria das linguagens de programao, e, quando no, atravs de bibliotecas. Um dado Boolean tem apenas duas possibilidades: True ou False. Apenas isso. Utiliza-se o Boolean para muitas operaes de igualdade e comparao, pois, a partir da, define-se uma execuo de uma estrutura de deciso ou condicional.

Estrutura de Deciso
Uma estrutura de deciso utiliza Booleans de forma implcita

A linguagem C no possui uma implementao explcita de dados do tipo Boolean, porm bastante implcito. Como exemplo, defini uma estrutura de deciso em C onde necessrio comparar dois dados para executar uma funo:

if (x > 20){  printf("%d  maior que 20", x);}//A instruo acima  simples: se x for maior que 20, //ento vai mostrar na tela o texto definido pela //funo "printf".

Neste caso, verificar se x ser maior ou no que 20 implica em determinar se essa declarao (x > 20) verdadeira ou falsa.

O que o Boolean tem a ver com nmeros Binrios?
O Boolean utiliza apenas 1 bit para determinar True/False (1 bit a unidade atmica de informao no computador, correspondendo a um 0 ou 1). De forma correspondente, 1 ser True e 0 Falso.

Se pegarmos ento uma linha enorme de uma numerao de 16 bits (16 dgitos de 0 ou 1), para cada bit haver ou um True ou um False, assim:

0000000000000100

A nvel de hardware, essa sequncia de 0s e 1s representada por correntes eltricas. Ento se a corrente eltrica est passando em uma determinada voltagem (True), quer dizer que 1. Caso contrrio, ou seja, a corrente eltrica esteja passando uma voltagem menor ou no esteja passando nenhuma voltagem (False), quer dizer 0.

Historicamente, este o mtodo principal para leitura e escrita de dados, desde a poca dos cartes perfurados, em que literalmente se escovava bits (confira o artigo do Wikipedia aqui).

Por fim, o processo de codificao, como j falado, converte nmeros decimais em binrios. Abaixo descrevo, como fazer esse processo:

Convertendo de decimal para binrio

Binrio um sistema numrico de base 2, como j falado. Ento, para realizar a converso, temos que realizar uma sucesso de divises do nmero que queremos converter por 2 e anotar os resultados, tanto o quociente quanto o resto das divises. Assim:

658 / 2 = resultado: 329 | resto = 0
329 / 2 = resultado: 164 | resto = 1
164 / 2 = resultado: 82 | resto = 0
82 / 2 = resultado: 41 | resto = 0
41 / 2 = resultado: 20 | resto = 1
20 / 2 = resultado: 10 | resto = 0
10 / 2 = resultado: 5 | resto = 0
5 / 2 = resultado: 2 | resto = 1
2 / 2 = resultado: 1 | resto = 0
1 / 2 = resultado: 0 | resto = 1

Como podemos observar, as divises so realizadas at que o resultado seja 0. O nmero binrio ser formado pelos restos, da seguinte forma:

0100100101

Como o computador l a precedncia dos nmeros binrios da direita para a esquerda, ento temos que inverter essa numerao para chegarmos ao resultado final:

1010010010

Caso queira conferir, abra o console do seu navegador (pressione F11 e procure pelo menu "console") e digite "0bxxxxxxx", substituindo onde est com x pelos nmeros binrios e aperte "enter", conforme abaixo:

Inserindo nmero binrios em Javascript

Os passos acima podem ser convertidos em um algoritmo de programao. Ento, fiz esse pequeno programa em C com os mesmos passos descritos.

#include <stdio.h>char* dec2Bin(int number, char return2[17]){  int dec = number;  for(int i=1; dec != 0; i++){    return2[16-i] = (char)dec%2 + '0';    dec /= 2;  }  return return2;}int main(){    int number = 0;    char return1[17] = "0000000000000000";    printf("Escreva o nmero: 
"); scanf("%d", &number); dec2Bin(number, return1); printf("%s", return1); return 0;}

Convertendo de binrio para decimal

Para converter de binrio para decimal, primeiro, temos que inverter o nmero que temos em binrio para ser compatvel
com a leitura humana:

1010010010 >> 0100100101

Feito isso, vamos numerar cada um dos ndices do nmero, como um array:

0 1 0 0 1 0 0 1 0 1
0 1 2 3 4 5 6 7 8 9

Lembrando: o ndice deve comear do 0!

Feito isso, os campos que forem 1, efetuar a exponenciao de 2 elevado ao ndice dele e somar os resultados, assim:

0 1 0 0 1 0 0 1 0 1
0 1 2 3 4 5 6 7 8 9

2 ^ 1 = 2
2 ^ 4 = 16
2 ^ 7 = 128
2 ^ 9 = 512
Total = 658

Igualmente com a converso Decimal > Binrio, os passos acima tambm podem ser convertidos em algoritmo de programao, como o cdigo em C abaixo:

#include <stdio.h>#include <string.h>#include <math.h>int bin2Dec(char bin[17]){  int finalNumber = 0;  int tam = strlen(bin);  for(int i=0; i<tam; i++){    finalNumber += pow(2,(tam-i-1))*((int)bin[i]-'0');  }  return finalNumber;}int main(){    int number = 0;    char binary[17];    printf("Escreva o nmero: 
"); setbuf(stdin, NULL); fgets(binary, 16, stdin); binary[strcspn(binary, "
")] = 0; number = bin2Dec(binary); printf("%d", number); return 0;}

Finalmente...

Vimos que o processo de codificao converter do decimal ao binrio. Entender um boolean, na minha opinio, facilita muito entender como um nmero binrio funciona.
O sistema padro de representao de qualquer coisa no computador binrio, muito pela simplicidade e tambm por construo histrica. Para possibilitar o uso, tudo no computador passa pelo processo de codificao, que converter para a representao binria tudo o que mostrado em tela.
Ter um entendimento disso, ao menos bsico, nos facilita entender porque os computadores so verdadeiras mquinas de Turing, mas este assunto para outro post.


Original Link: https://dev.to/tttecnology/binarios-3o4o

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To