1483 words
7 minutes
Numeric Bases @ Crash Course
Introducao
Notacao Posicional
- Cada posicao de um digito tem um valor diferente dentro de um número;
- Em bases diferentes das de 10 (decimais), le-se dizendo numero por numero;
- As bases mais comuns utilizadas na computacao sao base 2 (binarios), base 8 (octais) e base 16 (hexadecimais).
- Sistema decimal: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
- Sistema binario: 0, 1;
- Sistema octal : 0, 1, 2, 3, 4, 5, 6, 7;
- Sistema hexadecimal : 0 ao 9 e A ao F.
Sistema Decimal (Base 10)
- Usamos o sistema decimal, tambem chamado de sistema de base 10, denotamos da seguinte maneira:
# NotationS = 10^n + ... + 10^3 + 10^2 + 10^1 + 10^0
# Example3785 (10) = 3 * 10^3 + 7 * 10^2 + 8 * 10^1 + 5 * 10^0Sistema Binario (Base 2)
- Contem
Xpossibilidades, ondeXpode ser definido como:
// Num intervalo// Assinadas: [-2^(8*x - 1) ... 2^(8*x - 1) - 1]// Unsigneds: [0...2^(8*x) - 1]x bytes = 2^(8 * x) bits
// Exemplo1 byte = 2^(8 * 1) bits
[-2^(8*x - 1)...2^(8*x - 1) - 1][-2^(7)...2^(7) - 1] = [-128...127][0...2^(8*1)] = [0...255]# NotationS = 2^n + ... + 2^3 + 2^2 + 2^1 + 2^0
# Combinar0, 1, 10, 11, 100, 101,110, 111, 1000, 1001, 1010,1011, 1100, 1101, 1110, 1111,...Conversao Binario (2) para Decimal (10)
// Exemplo1011 (2) = 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0 = 11 (10)Conversao Decimal (10) para Binario (2)
- Divida o numero decimal por 2 ate que nao seja mais possivel dividi-lo;
- 0’s a esquerda sao facultativos.
// EX113 => 13 / 2 = 6; 1 -> resto 6 / 2 = 3; 0 3 / 2 = 1; 1 1 / 2 = 0; 1
Pegar a ordem inversa dos restos: 13 (10) = 1101 (2)
// EX211,3 => - Parte Inteira; P1) Pega a ordem inversa. 11 / 2 = 5; 1 5 / 2 = 2; 1 2 / 2 = 1; 0 1 / 2 = 0; 1
- Parte Fracionaria; P2) Pega a ordem normal. 0,3 * 2 = 0,6; 0 0,6 * 2 = 1,2; 1 0,2 * 2 = 0,4; 0 0,4 * 2 = 0,8; 0 0,8 * 2 = 1,6; 1 0,6 * 2 = 1,2; 1 ...
11,3 (10) = 1011.010011... (2)Sistema Octal (Base 8)
Conversao Octal (8) para Decimal (10)
# NotationS = 8^n + ... + 8^3 + 8^2 + 8^1 + 8^0
# Example371 (8) = 3 * 8^2 + 7 * 8^1 + 1 * 8^0 = 249 (10)Conversao Decimal (10) para Octal (8)
- Divida o numero decimal por 8 ate que nao seja mais possivel.
// EX1177 => 177 / 8 = 22; 1 22 / 8 = 2; 6 2 / 8 = 0; 2
Pegar a ordem inversa dos restos: 177 (10) = 261 (8)
// EX20,634 => 0,634 * 8 = 5,072; 5 0,072 * 8 = 0,576; 0 0,576 * 8 = 4,608; 4 0,608 * 8 = 4,864; 4 ...
Pegar os restos em ordem: 0,634 (10) = 0,5044... (8)Sistema Hexadecimal (Base 16)
Conversao Hexadecimal (16) para Decimal (10)
# NotationS = 16^n + ... + 16^3 + 16^2 + 16^1 + 16^0
# Example1FA (16) = 1 * 16^2 + 15 * 16^1 + 10 * 16^0 = 506 (10)Conversao Decimal (10) para Hexadecimal (16)
- Divida o numero decimal por 16 ate que nao seja mais possivel,
// EX1685 => 685 / 16 = 42; 13 = D 42 / 16 = 2; 10 = A 2 / 16 = 0; 2
1. Pegar a ordem inversa dos restos2. Para os acima de 10, substitui-los por letras
// EX2=> 685 (10) = 2AD (16)
178,6 => 1) 178 = B2 2) 0,6 => 0,6 * 16 = 9,6; 9 0,6 * 16 = 9,6; 9 ...
=> 178,6 (10) = B2,9 (16)Relacao entre Sistemas de Numeracao
- Na computacao nao usamos bases octais e hexadecimais a toa. Elas facilitam (e muito) quando vamos converter dados para binario;
- O processo eh simples, basta splitarmos / agruparmos o valor e fazer a conversao.
Conversao Octal (8) para Binario (2)
- Cada digito do octal corresponde a 3 digitos do binário (pois 8 = 2^3). Assim, temos que dividir cada digito do octal em 3 partes.
27 (8):
2 7
0 1 0 1 1 1_ _ _ _ _ _4 2 1 4 2 1 => potencias da base 2 (..., 2^2, 2^1, 2^0)
Agora basta juntar tudo, dessa forma:
27 (8) = 010111 (2) ou 10111 (2)Conversao Binario (2) para Octal (8)
- Dividir o numero binario em grupos de 3 de tras para frente.
1000101 (2):
0 0 1 | 0 0 0 | 1 0 1_ _ _ _ _ _ _ _ _4 2 1 4 2 1 4 2 1
1 0 5
Agora basta juntar os digitos:
1000101 (2) = 105 (8)Conversao Hexadecimal (16) para Binario (2)
- Dividimos cada digito do “numero” hexadecimal em 4 partes (pois 16 = 2^4).
1B (16):
1 B = 11
0 0 0 1 1 0 1 1_ _ _ _ _ _ _ _8 4 2 1 8 4 2 1 => potencias da base 2 (..., 2^2, 2^1, 2^0)
Agora basta juntar tudo, dessa forma:
1B (16) = 11011 (2)Conversão Binario (2) para Hexadecimal (16)
- Dividir o numero binario em agrupamentos de 4 de tras para frente.
1011101 (2) =>
0 1 0 1 | 1 1 0 1_ _ _ _ _ _ _ _8 4 2 1 8 4 2 1
5 13 = D
=> 1011101 (2) = 5D (16)Conversao Octal (8) para Hexadecimal (16)
- Transforme em binario em grupos de tres;
- Depois divida-os em grupos de quatro.
33 (8) =>
3 3 0 1 1 0 1 1 _ _ _ _ _ _
0 0 0 1 | 1 0 1 1|.| .-> 0's para fechar o grupo
Agora basta transformar em hexadecimal:
1 | B => 1B (16)Conversao Hexadecimal (16) para Octal (8)
- Transforme em binario em grupos de quatro;
- Divida-os em grupos de tres.
1B (16) =>
1 B
0 0 0 1 1 0 1 1_ _ _ _ _ _ _ _
0 0 0 | 0 1 1 | 0 1 1||-> 0 para fechar o grupo
Agora basta transformar em octal:
0 | 3 | 3 => 33 (8)Operacoes com Binarios
Adição
- Regras:
1. 0 + 0 = 02. 0 + 1 = 13. 1 + 0 = 14. 1 + 1 => 10 (== 2 (10))5. 1 + 1 + 1 => 11 (2) (== 3 (10))- Exemplo:
1101 (2) + 1111 (2) = 11100 (2)
+1+1+1+1 1101+ 1111-------11100Subtracao
- Regras:
1. 1 - 0 = 12. 1 - 1 = 03. 0 - 0 = 04. 0 - 1 = 1 ("e pegar 1 emprestado da casa do lado")- Exemplo:
1110 (2) - 1011 (2) = 11 (2)
-1 -1 +11110 110(10) => 2- 1011 => - 1011------- ------- 0011Sinal Modulo / Magnitude
- O 1° digito (esquerda) representa o sinal do numerom 0 para positivo e 1 para negativo;
- Igualar o numero de digitos;
- Representar todos os numeros em quantidades iguais (ex: 8, 16, 32 bits);
- Primeiro se converte o numero para binario e depois igualamos ele ao numero de bits sendo que o 1° numero ira representar o sinal (positivo ou negativo).
-> Representar o 21 (10) positivo e negativo
21 (10) = 10101 (2) = 00010101 (2) |----> complemento para ter 8 bits
21 (10) = 10101 (2) = 10010101 (2)Complemento de 1
- O complemento de 1 de um numero binario eh a inversao dos digitos (ou melhor dizendo, o complemento de um numero eh o quanto falta para que ele chegue no ultimo digito do sistema numerico).
Complemento de 1 do número 10001110 (2)
10001110 -> 01110001 (2)Complemento de 2
- Consiste na utilizacao do complemento de 1, somando mais 1 a este complemento.
Complemento de 2 do numero 10001110
1°) Complemento de 1
10001110-> 01110001
2°) Complemento de 2
01110001+ 1----------01110010Realizando Subtração com Somas com o Complemento de 2
- Para isso, usamos o complemento de 2;
- Esse recurso eh muito utilizado em circuitos da ULA;
- Devemos igualar os numeros (ex.: usar o sinal-modulo de 8 bits);
- Somar o 1° numero com o complemento de 2 do 2°.
Representar em sinal-modulo de 8 bits a operacao: 21 (10) - 14 (10)
1°) Transformar em Binario + Sinal Modulo de 8 bits
21 (10) = 10101 (2) -> 00010101 (2)14 (10) = 1110 (2) -> 00001110 (2)
2°) Complemento no 2° numero
2.1) Complemento de 1 do 2° numero [14 (10)]
00001110 -> 11110001
2.2) Complemento de 2 do 2° numero [14 (10)]
11110001 + 1 ---------- 11110010
3°) Soma do 1° numero com o complemento de 2 do 2°
00010101+ 11110010------------ 100000111
Agora basta retirar esse 1° "1" da frente (pois sao apenas 8 bits). Numeric Bases @ Crash Course
https://dantsec.github.io/posts/crash-courses/all-about-numeric-bases/