Bits e operaBits e operaççõesõessimone/scminter/contaulas/3_BITS.pdf · • Menor unidade de...

Preview:

Citation preview

Sistemas de Computação

Bits e operaçõesBits e operações

Sistemas de Computação

Porque utilizar base 2 ?

• Representação na base 10– Estamos acostumados– Representação natural para transações financeiras (precisão)

• Implementação eletrônica na base 10– Difícil de armazenar– Difícil de codificar 10 níveis de tensão em um único fio– Difícil de implementar operações básicas (soma, multiplicação

etc.)

Sistemas de Computação

Representação Binária

• Circuitos eletrônicos trabalham com tensões com valores analógicos, podendo assumir qualquer valor nos limites permitidos

– Ex: Alimentação de 0 a 5 V, valores de 3,67 V, 0,5 V

• Circuitos digitais partem de circuitos eletrônicos e identificam apenas dois valores: 0 e 1

• Uma faixa de valores é definida como 1 e outra como 0

– Ex: Tecnologia TTL: 2-5V 1, 0-0,8 V 0

Sistemas de Computação

Representação Binária

• Vantagens: – Fácil de armazenar em elementos biestáveis– Precisão pode ser menor

• 2,8V e 3,3 V correspondem a 1– Implementação mais fácil das operações aritméticas

• Números de bits necessários para expressar Ncoisas diferentes é K, onde K é o menor número tal que 2K N

– Ex: Qual a cor do seu cabelo (preto,castanho,louro e ruivo)?4 opções, 2K 4, K=2, 2 bits, 00(preto), 01(castanho), 10(louro),

11(ruivo)

Sistemas de Computação

Organização da memória

• Computadores acessam grupos de bits de uma vez

• Menor unidade de endereçamento 1 byte = 8 bits

• Programa em linguagem de máquina enxerga a memória como um grande array de bytes, denominado memória virtual

• Cada byte de memória possui um endereço associado a ele e o conjunto de endereços éconhecido como espaço de endereçamento virtual

Sistemas de Computação

Organização da memória

• Este espaço é implementado por uma combinação de elementos:

– SRAM, DRAM, disco e sistema operacional

• No Unix e Windows, espaço de endereçamento privativo de um processo particular

• Tarefas do compilador e sistema de execução– Alocar e gerenciar onde os programas executáveis devem ser

armazenados– Vários mecanismos: estático, stack e heap– A alocação é sempre realizada dentro de um único espaço de

endereçamento virtual

Sistemas de Computação

Representação Hexadecimal

• Representação binária requer muitos 1s e 0s– 8 bits: 000000002 a 111111112

• Representação hexadecimal é um sistema baseado na base 16

• Requer 16 dígitos diferentes:– 0 a 9, A a F

• Cada dígito hexadecimal representa 4 bits de número representado em binário

– 8 bits: 0016 a FF16

Sistemas de Computação

Conversão entre Bases 2 e 10

• Números são representados utilizando-se a base 2– 1012, número binário cujo valor decimal é 5

• Valor de um número decimal: – D0 100 + D1 101 + D2 102 + …– 903, D0 = 3, D1 = 0, D2 = 9– 3 100 + 0 101 + 9 102 =903

• Valor decimal de um número binário:– B0 20 + B1 21 + B2 22 + …– 100011011, B0,, B1 ,B3, B4, B8

– 20 + 21 + 23 + 24 + 28 = 1 + 2 + 8 + 16 + 256 = 283

Sistemas de Computação

Conversão entre Bases

• Um computador possui uma unidade básica de informação de 12 bits. Quantos números podem ser representados por essa unidade básica e quais são eles ?

Sistemas de Computação

Conversão entre Base 10 e 2

1. Dividir número decimal por 2 e colocar o resto como o algarismo menos significativo

2. Enquanto o quociente for diferente de 02.1 Dividir o quociente por 22.2 Colocar o resto à esquerda do anterior2.3 Volte ao passo 2

Sistemas de Computação

Representação de Números em Base 16, 10 e 2

Dígito hexadecimal Valor decimal Valor binário

0 0 0000

1 1 0001

2 2 0010

3 3 0011

4 4 0100

5 5 0101

6 6 0110

7 7 0111

8 8 1000

9 9 1001

A 10 1010

B 11 1011

C 12 1100

D 13 1101

E 14 1110

F 15 1111

Sistemas de Computação

Conversão entre as Base 2 e 16

• 16 = 24

• Um algarismo hexadecimal é representado por 4 bits

• Divide-se o número binário em grupos de 4 bits da direita para a esquerda e substitui-se o algarismo hexadecimal correspondente ao grupo

Ex: (1011011011)2

(0010)(1101)(1011)2=(2DB)16

2 D B

Sistemas de Computação

Conversão entre as Base 16 e 2

• Substitui-se cada algarismo hexadecimal pelo grupo de 4 bits correspondente

Ex: (306)16

(0011)(0000)(0110)2=(001100000110)2

3 0 6

Sistemas de Computação

Conversão entre Bases 16 e 10

• Valor decimal de um número hexadecimal:– H0 160 + H1 161 + H2 162 + …Ex:

(2A5)16 = 5160 + 10161 + 2162 = 5 +160 + 512 = (677)10

Sistemas de Computação

Conversão entre Base 10 e 16

1. Dividir número decimal por 16 e colocar o resto como o algarismo menos significativo

1. Enquanto o quociente for diferente de 02.1 Dividir o quociente por 162.2 Colocar o resto à esquerda do anterior2.3 Volte ao passo 2

Sistemas de Computação

Palavras utilizadas nas máquinas

• Cada máquina possui um tamanho de palavra– Define o maior tamanho de inteiro da máquina incluindo endereços

• A maioria das máquinas possui uma palavra de tamanho igual a 32 bits

– Limita endereçamento a 4GB

• Estão aparecendo sistemas com tamanho de palavra de 64 bits

– Capacidade de endereçamento de aproximadamente 1,8 1019

bytes

Sistemas de Computação

Organização da memória orientada a palavra

• Endereços especificam localizações de bytes

– endereço do primeiro byte da palavra

– endereços de palavras sucessivas diferem por 4 (32-bit) ou 8 (64-bits)

End.=

0000

End.=

0008

End.=

0000

End.=

0004

End.=

0008

End.=

0012

Palavra de 32 bits

Palavra de 64 bits

Bytes Endereços

0000000100020003000400050006000700080009001000110012001300140015

Sistemas de Computação

Representação de dados

• As máquinas suportam múltiplos formatos de dados

– Utilizam frações ou números múltiplos do tamanho da palavra– Sempre um número inteiro de bytes

• Tamanhos de objetos em C (em bytes)Declaração em C 32-bit típico Compaq Alpha

char 1 1short int 2 2

int 4 4long int 4 8

char * 4 8float 4 4

double 8 8

Sistemas de Computação

Ordenação dos bytes

• Como os bytes de uma palavra multibytes devem ser ordenados na memória ?

• PCs são máquinas Little Endian– O byte menos significativo possui o menor endereço

• Suns, Macs são máquinas Big Endian– O byte menos significativo possui o maior endereço

Sistemas de Computação

Ordenação dos bytes

• Exemplo:– Variável X possui a representação 0x01234567– Endereço de X é 0x100

Big endian

Little endian

01 23 45 67

67 45 23 01

0x100 0x101 0x102 0x103

0x100 0x101 0x102 0x103

Sistemas de Computação

Examinando representação de dados

• Código para imprimir a representação de dados

• Associa a um ponteiro o tipo unsigned char *cria um array de bytes

typedef unsigned char *byte_pointer;void show_bytes(byte_pointer start, int len){int i;for (i=0; i<len; i++)printf("%p\t%.2x\n", start+i,start[i]);

printf("\n");}

Sistemas de Computação

Examinando representação de dados

• int a = 15213;

• printf("int a = 15213;\n");

• show_bytes((byte_pointer) &a, sizeof(int);

Resultado:

int a = 15213;11ffffcb8 6d11ffffcb9 3b11ffffcba 0011ffffcbb 00

Sistemas de Computação

Representando inteiros

int A = 15213; Decimal: 15213Binário: 0011 1011 0110 1101Hexa: 3 B 6 D

Alpha, Linux, NT Sun

6D

3B

00

00

00

00

3B

6D

Sistemas de Computação

Representando ponteiros

int A = 15213int *P = &A

Endereço AlphaHexa: 1 F F F F F C A 0Bin.: 0001 1111 1111 1111 1111 1111 1100 1010 0000

Endereço SunHexa: E F F F F B 2 CBin.: 1110 1111 1111 1111 1111 1011 0010 1100

A0

FC

FF

FF01

00

00

00

EF

FF

FB

2C

Sistemas de Computação

Representando floats

float A = 15213,0;

Representação em ponto flutuante padrão IEEEHexa: 4 6 6 D B 4 0 0 Binário: 0100 0110 0110 1101 1011 0100 0000 0000

Alpha, Linux, NT Sun

00

B4

6D

46

46

6D

B4

00

Sistemas de Computação

Representando strings em C

• Representados como um array de caracteres

• Cada caracter no formato ASCII

– codificação 7-bit– caracter 0 tem o cód. 0x30

• dígito i tem cód. 0x30+i

• Último caracter é o caracter nulo

• Sem problemas de ordenação de bytes, pois o dado é um byte

• Arquivos texto geralmente independentes de plataforma

Alpha, Linux, NT Sun

31

35

32

31

33

00

char *S= ”15123 ”

31

35

32

31

33

00

Sistemas de Computação

Representação de código de máquina

• O programa é codificado como uma seqüência de instruções

– Operações simples: aritméticas, leitura ou escrita da memória, desvio condicional

– Instruções codificadas em bytes• Alpha, Sun,Mac utilizam instruções de 4 bytes (RISC)• PC utiliza instruções de tamanho variável (CISC)

– Tipos de instruções e codificação diferentes para máquinas diferentes

• código binário não compatível

Sistemas de Computação

Representando instruções

Alpha Sun PCint sum (int x, int y)

{

return x+y;

}

• Alpha e Sun utilizam 2 instruções de 4 bytes

• PC utiliza 7 instruções de 1, 2 e 3 bytes

– estruturas do programa em NT e Linux diferentes

000030420180FA6B

81C3E00890020009

5589E58B450C03450889EC5DC3

Sistemas de Computação

Álgebra booleana

• Desenvolvida por George Boole no século 19 aplicada por Claude Shannon em sistemas digitais (1937)

• Representação algébrica da lógica codifica VERDADEIRO como 1 e FALSO como 0

• Operações :– AND: A & B=1 somente quando A=1 e B=1– OR: A | B 1 quando A=1 ou B=1– NOT: ~A=1 quando A=0– XOR= A^B=1 quando A=1 ou B=1, mas não ocorre quando ambos

iguais a 1

Sistemas de Computação

01101001 01101001 01101001

& 01010101 | 01010101 ^ 01010101 ~01010101

01000001 01111101 00111100 10101010

Álgebra booleana

• Pode operar em vetores de bits

• Representação de conjuntos– Um vetor com w bits representa os subconjuntos {0,...,w} e aj=1 se j A

• 01101001 {0,3,5,6}• 01010101 {0,2,4,6}

– & Interseção 01000001 {0,6}– | União 01111101 {0,2,3,4,5,6}– ~ Complemento 10101010 {1,3,5,7}

Sistemas de Computação

Operações com bits em C

• Operações &, |, ~,^disponíveis em C– Se aplicam a qualquer tipo inteiro: long, int, short, char

• Tratam os argumentos como vetores de bits

• Exemplos (tipo char)– ~0x41 0xBE

01000001 10111110

– 0x69 & 0x55 0x41

01101001 & 01010101 01000001

– 0x69 | 0x55 0x7D

01101001 | 01010101 01111101

Sistemas de Computação

Operações com bits em C

• Rotina para trocar os valores armazenados nos endereços estipulados pelas variáveis do tipo ponteiro x e yvoid troca(int *x, int *y){

*x = *x ^ *y; /* 1 */*y = *x ^ *y; /* 2 */*x = *x ^ *y; /* 3 */

}

Passo *x *yInício A B

1 A^B B2 A^B (A^B)^B=A (̂B^B)=

A^0=A3 (A^B)^A=(B^A)^A=

B (̂A^A)=B^0=BA

Final B A

Sistemas de Computação

Operações lógicas em C

• Operações &&, ||, ! disponíveis em C– Tratam 0 como FALSO– Qualquer coisa diferente de 0 é VERDADEIRO– Sempre retorna 1 ou 0

• Exemplos (tipo char)– !0x41 0x00

– !0x00 0x01

– !!0x41 0x01

– 0x69 && 0x55 0x01

– 0x69 || 0x55 0x01

Sistemas de Computação

Operações de deslocamento em C

Deslocamento à esquerda: x << y– desloca o vetor de bits x, y posições para

a esquerda– joga fora os bits deslocados da esquerda– preenche os bits da direita com 0s

Deslocamento à direita: x >> y– desloca o vetor de bits x, y posições para

a direita– joga fora os bits deslocados da direita– preenche os bits da esquerda com 0s para

desl. lógico– preenche os bit da esquerda com o bit mais

à esquerda que sobrou para desl. aritmético

Argumento x 01100010

<< 3 00010000

Log. >> 2 00011000

Aritm. >> 2 00011000

Argumento x 10100010

<< 3 00010000

Log. >> 2 00101000

Aritm. >> 2 11101000

Recommended