Bits e operações. Sistemas de Computação

Documentos relacionados
Representação de Dados (inteiros não negativos)

Linguagem de Montagem Assembly

Introdução à Computação MAC0110

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

Princípios de Desenvolvimento de Algoritmos MAC122

Paradigmas de Linguagens

Computação e Programação

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

3/14/2012. Programação de Computadores O Computador. Memória Principal representação binária

1/50. Conceitos Básicos. Programa Básico

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

Sistemas de Numeração

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização.

William Stallings Arquitetura e Organização de Computadores 8 a Edição

Operadores e Expressões: bit-a-bit e especiais

Linguagem C Princípios Básicos (parte 1)

Disciplina: Introdução à Engenharia da Computação

Representação de Dados (inteiros não negativos)

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Engenharia Civil. Representação da Informação. Introdução à Computação

3. Linguagem de Programação C

Sistemas de Numeração. Tiago Alves de Oliveira

Introdução à Linguagem de Programação C: Variáveis, Constantes, Expressões, Atribuição, Tipos de dados, Entrada e Saída de Dados

4 Variáveis. Unesp Campus de Guaratinguetá

Expoente Mantissa Frac. UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Linguagem C: Variáveis e Operadores. Prof. Leonardo Barreto Campos 1

Elementos Básicos. C# - Elementos básicos. Primeiro programa Tipos de dados Variáveis Constantes Expressões e operadores Controlo de fluxo Tabelas

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Cap. 2 Expressões na linguagem C

FCA - Editora de Informática xv

INTRODUÇÃO À LINGUAGEM C

3. Linguagem de Programação C

Nível da Arquitetura do Conjunto de Instruções. Ronaldo de Freitas Zampolo

Programação científica C++

Tópicos de hoje: Cap. 2 Expressões na linguagem C. Bits, Bytes e Palavras. Variáveis e Constantes. Números inteiros num Byte

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

Sistemas de Numeração. Exemplos de Sistemas de Numeração (1) Exemplos de Sistemas de Numeração (2) Sistemas de Numeração

CONJUNTO DE INSTRUÇÕES

Algoritmos e Programação

PARTE I I: ARITMÉTICA COMPUTACIONAL ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR

Linguagem C: Introdução

Universidade Federal de Uberlândia Faculdade de Computação. Representação e aritmética binária

Prof. Leonardo Augusto Casillo

Organização e Arquitetura de Computadores I

ARQUITETURA DE COMPUTADORES

Algoritmos II prof. Daniel Oliveira

Sistemas de Numeração

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Funções getchar() e putchar()

Números são números, letras são números e sinais de pontuação, símbolos e até mesmo as instruções do próprio computador são números.

Linguagens de Programação

Arquitetura e Organização de Computadores

Introdução à Linguagem C++

Sistemas numéricos e a Representação Interna dos Dado no Computador

Arquitetura e Organização de Computadores

Referências. Linguagem C. Tipos de variáveis em XC8. Tipos de variáveis. Tipos de variáveis em XC 8 Exemplo. Radicais numéricos em C

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Cursos: Análise, Ciência da Computação e Sistemas de Informação Laboratório I - Prof. Aníbal Notas de aula 2 SISTEMAS NUMÉRICOS

A Linguagem C. A forma de um programa em C

MATA49 Programação de Software Básico

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Introdução à Computação

Paradigmas de Linguagens de Programação. Tipos de Dados

Algoritmos e Estruturas de dados

Lista de Exercícios Sistemas de Numeração

Vetores e Matrizes. Prof. Fabrício Olivetti de França Charles Henrique

Organização e Arquitetura de Computadores I

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Aula 23: Ponteiros Introdução a Programação Túlio Toffolo & Puca Huachi

CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP)

Eletrônica Digital Apresentação e Cap.1 PROF. EDUARDO G. BERTOGNA UTFPR / DAELN

ESTRUTURA DE DADOS I AULA I

Algoritmos e Estruturas de Dados I

Transcrição:

Bits e operações

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.)

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

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 N coisas diferentes é K, onde K é o menor número tal que 2 K N Ex: Qual a cor do seu cabelo (preto,castanho,louro e ruivo)? 4 opções, 2 K 4, K=2, 2 bits, 00(preto), 01(castanho), 10(louro), 11(ruivo)

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

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

Representação Hexadecimal Representação binária requer muitos 1s e 0s 8 bits: 00000000 2 a 11111111 2 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: 00 16 a FF 16

Conversão entre Bases 2 e 10 Números são representados utilizando-se a base 2 101 2, número binário cujo valor decimal é 5 Valor de um número decimal: D 0 10 0 + D 1 10 1 + D 2 10 2 + 903, D 0 = 3, D 1 = 0, D 2 = 9 3 10 0 + 0 10 1 + 9 10 2 =903 Valor decimal de um número binário: B 0 2 0 + B 1 2 1 + B 2 2 2 + 100011011, B 0,, B 1,B 3, B 4, B 8 2 0 + 2 1 + 2 3 + 2 4 + 2 8 = 1 + 2 + 8 + 16 + 256 = 283

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?

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 0 2.1 Dividir o quociente por 2 2.2 Colocar o resto à esquerda do anterior 2.3 Volte ao passo 2

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

Conversão entre as Base 2 e 16 16 = 2 4 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

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

Conversão entre Bases 16 e 10 Valor decimal de um número hexadecimal: H 0 16 0 + H 1 16 1 + H 2 16 2 + Ex: (2A5) 16 = 5 16 0 + 10 16 1 + 2 16 2 = 5 +160 + 512 = (677) 10

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 0 2.1 Dividir o quociente por 16 2.2 Colocar o resto à esquerda do anterior 2.3 Volte ao passo 2

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 10 19 bytes

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) Palavra de 32 bits End. = 0000 End. = 0004 End. = 0008 End. = 0012 Palavra de 64 bits End. = 0000 End. = 0008 Bytes Endereços 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015

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 1 short int 2 2 int 4 4 long int 4 8 char * 4 8 float 4 4 double 8 8

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

Ordenação dos bytes Exemplo: Variável X possui a representação 0x01234567 Endereço de X é 0x100 Big endian 0x100 0x101 0x102 0x103 01 23 45 67 Little endian 0x100 0x101 0x102 0x103 67 45 23 01

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"); }

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 6d 11ffffcb9 3b 11ffffcba 00 11ffffcbb 00

Representando inteiros int A = 15213; Decimal: 15213 Binário: 0011 1011 0110 1101 Hexa: 3 B 6 D Alpha, Linux, NT Sun 6D 3B 00 00 00 00 3B 6D

Representando ponteiros int A = 15213 int *P = &A Endereço Alpha Hexa: 1 F F F F F C A 0 Bin.: 0001 1111 1111 1111 1111 1111 1100 1010 0000 A0 FC FF FF 01 00 00 00 Endereço Sun Hexa: E F F F F B 2 C Bin.: 1110 1111 1111 1111 1111 1011 0010 1100 EF FF FB 2C

Representando floats float A = 15213,0; Alpha, Linux, NT Sun 00 B4 6D 46 46 6D B4 00 Representação em ponto flutuante padrão IEEE Hexa: 4 6 6 D B 4 0 0 Binário: 0100 0110 0110 1101 1011 0100 0000 0000

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 char *S= 15123 Alpha, Linux, NT Sun Último caracter é o caracter nulo Sem problemas de ordenação de bytes, pois o dado é um byte Arquivos texto geralmente independentes de plataforma 31 35 32 31 33 00 31 35 32 31 33 00

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

Representando instruções int 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 Alpha Sun PC 00 00 30 42 01 80 FA 6B 81 C3 E0 08 90 02 00 09 55 89 E5 8B 45 0C 03 45 08 89 EC 5D C3

Á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

Álgebra booleana Pode operar em vetores de bits 01101001 01101001 01101001 & 01010101 01010101 ^ 01010101 ~01010101 01000001 01111101 00111100 10101010 Representação de conjuntos Um vetor com w bits representa os subconjuntos {0,...,w} e a j =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}

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

Operações com bits em C Rotina para trocar os valores armazenados nos endereços estipulados pelas variáveis do tipo ponteiro x e y void troca(int *x, int *y) { *x = *x ^ *y; /* 1 */ *y = *x ^ *y; /* 2 */ *x = *x ^ *y; /* 3 */ } Passo *x *y Início A B 1 A^B B 2 A^B (A^B)^B=A^(B^B)= A^0=A 3 (A^B)^A=(B^A)^A= A B^(A^A)=B^0=B Final B A

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

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