• Aula 5 - Dados Digitais

Dados Digitais

Estudando
Bibliografia
[Cap 3,5. NISAN, 2005]
[Cap 8,11,12. FLOYD, 2011]
[Cap 7 TOCCI]
Leitura extra:
Introduction to Digital Systems - Cap. 1
Introduction to Digital Systems - Cap. 2
Vídeos (extra)
---------------- --------------------------------------------------------------------------------------------------------------------
KhanAcademy
Why Do Computers Use 1s and 0s? Binary and Transistors Explained.

Primeiras Máquinas de Calcular

Wilhelm Schickard (1592–1635) construiu em 1623 uma calculadora para seu amigo astrônomo Johannes Kepler. Esta é a mais antiga calculadora mecânica conhecida de quatro funções, que foi descoberta por esboços da sua criação.

Fonte: http://people.idsia.ch/~juergen/schickard.html

História

Blaise Pascal (1623-1662) inventou e produziu em 1642 a Pascaline. Ela só podia fazer adição e subtração, manipulando os números inscritos em seus mostradores. Ele construiu 50 deles ao longo de 10 anos, embora só tenha vendido 15.

Fonte: http://www.computerhistory.org/revolution/calculators/1/47

Primeiras Máquinas de Calcular

Gottfried Wilhelm von Leibniz (1646-1716) é creditado como um dos inventores do cálculo diferencial e integral. Porém, foi o primeiro a documentar e estudar profundamente o sistema binário de numeração (base 2). Em 1672 Leibniz começou a inventar uma máquina capaz de fazer as 4 operações aritméticas, o Staffelwalze.

Fonte: https://en.wikipedia.org/wiki/Gottfried_Wilhelm_Leibniz

Sistemas numéricos é a maneira como os seres humanos representam números, ao decorrer da história as civilizações assumiam maneiras diferentes de representar números, muitas vezes possuindo diferentes maneiras de codificar oralmente/escrito.

O sistema decimal é o mais utilizado pelas civilizações modernas, nele utilizamos 10 símbolos: 0, 1 ... 9 para representar qualquer número, essa notação remonta do fato de possuirmos 10 dedos em nossas mãos. Nesse sistema, cada digito possui um peso da ordem \(10^n\):

Algarismos indo-arábicos

O sistema de numeração hindu como a conhecemos hoje, pode ser atribuído a dois homens: o astrônomo Ariabata (आर्यभट) e seu pupilo Bhāskara I, durante 499-522 ac. Eles inventaram um sistema que se baseia na utilização da combinação de sílabas para formar os números, em um sistema incluindo a notação do zero.

Fonte: https://kids.britannica.com/kids/assembly/view/89478

Base 2

No sistema de base 2 possuímos apenas duas opções de símbolo: 0 e 1. Nessa base, cada posição possui um peso da ordem \(2^n\):

Dessa maneira podemos construir o valor que desejarmos de decimal (\(m\)) em binário, para isso será necessário ocupar \(ceil(log2(m))\) bits para armazenar o valor. A tabela a seguir ilustra algumas situações:

ceil: arredondar para cima

Valor decimal Bits necessário
\(0 .. 1\) 1
\(0 .. 3\) ceil(log2(4)) = 2
\(0 .. 4\) 2
\(0 .. 6\) 3
\(0 .. 7\) 3
\(0 .. 15\) 4
\(0 .. 31\) 5
\(0 .. 63\) 6
\(0 .. 127\) 7

Supondo que possuímos um binário de três dígitos, um contador de 0 a 7 em decimal seria em binário: 000 -> 001 -> 010 -> 011 -> 100 -> 101 -> 110 -> 111 ... . O número 45 em binário é 0b101101:

5 4 3 2 1 0 posição
2^5 2^4 2^3 2^2 2^1 2^0 peso
32 16 8 4 2 1 valor
1 0 1 1 0 1 número binário

Tip

Não tem muito segredo, para interpretar números binários facilmente é necessária prática!

Tip

Para saber qual o valor máximo de decimal que é possível armazenar com \(n\) bits:

\(0 .. 2^n-1\)

Nomenclatura

Iremos utilizar os prefixos:

  • : Para indicar um número em decimal
  • 0b: Para indicar um número em binário
  • 0x: Para indicar um número em hexadecimal

Exemplo:

hex      bin      dec
0x100 != 0b100 != 100

Base 2

Converta 15 de decimal para base 2 (binário)

Answer

 8+4+2+1 = 15
 1 1 1 1

Definições

Em muitas linguagens de programação é necessário definirmos o tamanho da variável que iremos armazenar um dado, para facilitar o entendimento damos nome a quantidade de bits que ela irá ocupar:

  1. 4 bits: nibble
  2. 8 bits: byte
  3. 16 bits: halfword
  4. 32 bits: word

Conversão Decimal <-> Binário

Existem diversas técnicas de conversão binário 🔄 decimal, a seguir detalhes de como realizar essas conversões, o segredo é entender os pesos de cada casa de um bit no sistema binário e então fazer a conta inversa.

Base 16

A base 16, ou hexadecimal, é outra maneira de representarmos números utilizando não só 2 ou 10 símbolos como acabamos de ver, mas 16 símbolos! É como se conseguimos representar o valor 10 com um único carácter, no caso iremos utilizar o A.

Nessa base, cada unidade possui um peso na forma \(2^{16}\):

Um contador no formato hexadecimal possui a seguinte forma:

Decimal Binário Hexadecimal
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
16 0001 0000 10

Base 16 ↔ Base 2

A conversão de número na base 16 para a base 2 e vice-versa acontece de forma trivial. Da base 2 para a base 16 basta separar os bits da palavra em unidades de 4 casas e então realizar a conversão de cada grupo de 4 bits para o seu equivalente em Hexa. Para a conversão de hexa para binário, basta converter cada símbolo de hexa para o seu equivalente em binário (4 dígitos), seguindo a tabela anterior.

Exemplos:

a) 0xA01 para binário:

  A   0    1
  |    \    \
  |     \    \
 1010   0000  0001

 -> 0b1010_0000_0001

b) 0b1111_0101_1000 para hexa:

 1111 0101 1000
  |    |    |
  |    |    |
  F    5    8

  -> 0xF58

Base 16 ↔ Base 10

Para converter de Hexa para Decimal basta aplicar os pesos em cada um das unidades, como demonstrado a seguir:

a) 0xA01 para decimal:

    A       0       1
    |       |       |
    |       |       |
A.16^2  0.16^1   1.16^0

-> 10.256 + 0.16 + 1.1 = 2561

Para alterar a base de Decimal para Hexa, uma das soluções mais triviais é a de converter primeiro para binário e então agrupar os bits de 4 em 4 e converter para hexa:

   Decimal -> Binário -> Hexa

b) 42 -> 0x ???

     32 +  8 +  2 = 42
      \   |   /     ---------------
       \  |  /      |             |
        \ | /       |             v
42 -> 0b101010 -> 0010 1010 -> 0x2A
                        |        ^
                        |        |
                        ----------
                ----|----
                    |
                Blocos de 4 bits

Base 8

Similar as outras bases de número, o sistema octal é composto por 8 símbolos: 0 .. 7, e nele cada posição possui valor na forma de: \(8^n\). Veja o exemplo a seguir:

a) 137 em octal para decimal: \(1.8^2 + 3.8^1 + 7.8^0=95\)

2 1 0 posição
8^2 8^1 8^0 peso
64 8 1 peso
1 3 7 valor octal
1*64 3*8 7*1 ➡️ \(64+24+7=95\)

Para representarmos um valor octal em binário, é necessário reservarmos 3 bits para cada símbolo do número octal, a conversão é feita como no sistema hexadecimal, porém aqui separando blocos de 3 bits:

b) 137 para binário:

001 011 111

O sistema octal é utilizado no Linux para permissões de arquivos onde são necessários 3 bits para controlar se um usuário possui: acesso de leitura, escrita e/ou execução de um determinado arquivo:

Permission rwx Binary octal
read, write and execute rwx 111 7
read and write rw- 110 6
read and execute r-x 101 5
read only r-- 100 4
write and execute -wx 011 3
write only -w- 010 2
execute only --x 001 1
none --- 000 0

Para modificar a permissão de um arquivo no linux é necessário fornecer a informação para três grupos diferentes: usuário, grupos na qual o usuário faz parte e qualquer outro user. Para isso basta escrever no terminal:

         / user
        /
$chmod 754 FILE
        | \
        |  \ others
        group

Isso da permissão de:

  • user: read/write/execute
  • group: read/execute
  • others: read

Povos

Alguns povos da América do Norte, México e Europa utilizam o sistema octal, pois consideram a quantidade dos vãos dos dedos e não os dedos propriamente.

Fonte: https://en.wikipedia.org/wiki/Octal#By_Native_Americans

Início da computação

Para que serve o sistema octal? No começo da computação a IBM possuía memórias com: 6-bit, 12-bit, 24-bit e 36-bit. Sendo todas as unidades divisíveis por 3, o que facilita a interpretação em um sistema octal.

Outros sistemas

Existem inúmeras maneiras de codificação de números e/ou caracteres diversos, as mais utilizadas são:

  • BCD
  • ASCII
  • UTF-8

BCD

No sistema Binary-coded decimal (BCD) cada unidade de um sistema decimal é convertido para 4 bits, muito parecido com a conversão para Hexadecimal. Ele é muito utilizado em relógios e quando há a necessidade de exibição do valor em decimal em binário (Display de 7 segmentos).

  • Exemplo, 356 em BCD:
     3    5    6    : Decimal
    0011 0101 0110  : BCD

ASCII

ASCII (do inglês American Standard Code for Information Interchange; "Código Padrão Americano para o Intercâmbio de Informação") é uma maneira de codificar em binário (8 bits) 95 sinais gráficos (letras, símbolos e números) e alguns sinais de controle. É muito utilizada pelos programas para armazenarem 'caracteres' e 'strings'.

Fonte: www.asciitable.com

Por exemplo, a palavra Insper convertido para ASCII fica da seguinte maneira (em decimal):