Representação de Dados (inteiros com sinal)

Documentos relacionados
Representação de Dados Inteiros com sinal

Representação de Inteiros

Sistemas de Computação. Operações Aritméticas com Inteiros

Sistemas de Computação. Representação de Inteiros

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

Sistemas Digitais / Sistemas Digitais I 6 Representação de números com sinal

PCS 3115 Sistemas Digitais I

Capacidade de Armazenamento. Bit. Binário para Decimal. Decimal para Binário. Operações Aritméticas no Sistema binário.

Fundamentos de Programação

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

Representação de Dados

Sistemas de Computação

Arquitetura e Organização de Computadores

Representação Digital da Informação II

Aritmética Binária e Complemento a Base. Introdução ao Computador 2010/1 Renan Manola

Organização e Arquitetura de Computadores I

Sistemas de Computação

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

PCS 3115 (PCS2215) Sistemas Digitais I. Módulo 03a Aritmética Binária. Prof. Dr. Marcos A. Simplicio Jr. versão: 3.0 (Jan/2016) Conteúdo

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

Introdução à Computação

Fundamentos de Arquiteturas de Computadores. Representação de números inteiros em complemento a 2

Introdução à Computação

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

Binários: Operações matemáticas

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

Circuitos Lógicos Aula 22

Aula 7: Representações de Números Inteiros: Sinal e Magnitude e Representação em Excesso de k

MAT115 Introdução ao Processamento de Dados Professor: Ibirisol Fontes Ferreira DCC: Departamento de Ciência da Computação

Circuitos Lógicos. Capítulo 9 Aritmérica Digital: Operações e Circuitos

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

Arquitetura e Organização de Computadores

REPRESENTAÇÃO DE NÚMEROS EM BINÁRIO E HEXADECIMAL

Aritmética Computacional Aula 01. Professor: André Luis Meneses Silva orgearq20091.wordpress.com

Aula 9. Aritmética Binária. SEL Sistemas Digitais. Prof. Dr. Marcelo Andrade da Costa Vieira

Circuitos Digitais. Conteúdo. Soma de Números Binários. Soma de Números Binários. Exemplos. Exemplos. Aritmética Binária

Sistemas Digitais Módulo 2 Representações com Sinal e Aritmética Digital

Sistemas Numéricos e Representação de Dados. Heitor S. Ramos

Técnicas de Programação em Engenharia Elétrica I - Engenharia de Sistemas Embarcados - Prof. Alessandro Zimmer Introdução à Linguagem C

Eletrônica Digital I (EDL I)

Sistemas de Numeração

Arquitetura e Organização de Computadores. Sistemas Numéricos

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

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini /

Arquitetura de Computadores

Aula 4 - Operadores. Prof. Laura Silva de Assis. Engenharia de Computação 2 o Período

Operações Aritméticas no sistema binário. Na área de eletrônica digital e microprocessadores é usado as operações aritméticas.

Números Binários Operações Aritméticas. Prof. Patrícia G. P. Magalhães

Representações de Números Inteiros: Sinal e Magnitude e Representação em Excesso de k

Expressões lógicas, expressões condicionais, prioridades e operadores, base binária, operadores de bits

PROGRAMAÇÃO DE COMPUTADORES V - TCC Modulo 5: Array. (complemento de dois) Aura - Erick

Aula de hoje. Códigos numéricos. Códigos binários. Armazenamento de dados. Armazenamento de dados. Armazenamento de dados

Representação Digital de Informação Aritmética

Fundamentos de Programação

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

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

Erros, Precisão Numérica e Ponto Flutuante

Cálculo Numérico. Conjunto de métodos utilizados para a obtenção de resultados de problemas matemáticos através de aproximações.

7 Operadores e Expressões

Operadores. Tipo de operadores. Aritméticos. Relacionais. Lógicos. Bit a bit. Cálculos aritméticos: soma, subtracção, multiplicação, divisão, etc.

LINGUAGEM C: VARIÁVEIS E EXPRESSÕES

Representações numéricas e bases de numeração

Aritmética dos Computadores

Capítulo 2. Representação de dados em sistemas computacionais

Operações com números binários

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

4.1- Aritméticos + soma - subtração * multiplicação / divisão % módulo (resto da divisão de inteiros ).

CIRCUITOS ARITMÉTICOS (Unidade 4)

ARQUITETURA DE COMPUTADORES

Revisão C++ - Parte 1

Aula 4. Programa para tabelar potências de base 2 Análise de erros de overflow/underflow

Notas de Aula Guilherme Sipahi Arquitetura de Computadores. Aritmética de Inteiros

Capítulo V Sistemas Numéricos

Computação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa

Algoritmos: Conceitos Fundamentais. Slides de autoria de Rosely Sanches e Simone Senger de Souza

Baseado nos slides de Anna Tostes SISTEMA NUMÉRICO

X. B Y Base do sistema de numeração Dígito do número em questão

Complemento a Um e Complemento a Dois

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

Sistemas de Numeração. Sistemas de Numeração. Sistemas de Numeração. RUIDO em Sistemas Computacionais. Arquiteturas de Computadores

PIC - PROGRAMAÇÃO LINGUAGEM C. AUTOR: ENG. ANTONIO CARLOS LEMOS JÚNIOR

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

1. Notação em Complemento de 2

Matemática para Ciência de Computadores

ARQUITETURA DE COMPUTADORES

Ponto Fixo e Ponto Flutuante

Linguagem de Programação I. Aula 06 Linguagem C: Tipos de Dados

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

Organização de Computadores I

Organização de Computadores

Representação de Dados Arrays e Structs

FACULDADE BATISTA MINEIRA - CST Banco de Dados Estruturas de Dados - Variáveis

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I. Qualificadores. prof. Dr. César Augusto M. Marcon prof. Dr. Edson Ifarraguirre Moreno

2 Representação de Números Inteiros Negativos

Métodos Numéricos Erros Ponto Flutuante. Professor Volmir Eugênio Wilhelm Professora Mariana Kleina

Representação de Valores Números Binários Negativos

ARQUITECTURA DE COMPUTADORES

Transcrição:

Representação de Dados (inteiros com sinal) Noemi Rodriguez Ana Lúcia de Moura http://www.inf.puc-rio.br/~inf1018

Representação de Inteiros Com n bits podemos representar 2 n valores

Representação de Inteiros Com n bits podemos representar 2 n valores para inteiros não negativos (unsigned) o intervalo de valores é [0, 2 n -1]

Representação de Inteiros Com n bits podemos representar 2 n valores para inteiros não negativos (unsigned) o intervalo de valores é [0, 2 n -1] para inteiros com sinal, teremos 0, valores negativos e valores positivos

Representação de Inteiros Com n bits podemos representar 2 n valores para inteiros não negativos (unsigned) o intervalo de valores é [0, 2 n -1] para inteiros com sinal, teremos 0, valores negativos e valores positivos Como representar esses valores? há diferentes formas de representação

Sinal e Magnitude A ideia é usar o bit mais significativo como "sinal" "1" valor negativo

Sinal e Magnitude A ideia é usar o bit mais significativo como "sinal" "1" valor negativo Com 4 bits temos sinal + 8 valores possíveis (0..7) 0000... 0111 0 a 7 decimal 1001... 1111-1 a -7 decimal 1000 zero negativo?

Complemento a 2 Representação mais usual para inteiros com sinal Alguns padrões de bits representam valores positivos e alguns representam valores negativos uma única representação para 0

Complemento a 2 Representação mais usual para inteiros com sinal Alguns padrões de bits representam valores positivos e alguns representam valores negativos uma única representação para 0 O bit mais significativo também distingue valores negativos e não negativos X n-1 X n-2,...x 3 X 2 X 1 X 0 0 valor não negativo 1 valor negativo

Equivalência mod 2 n Relação que define uma partição dos inteiros em classes de equivalência x Ξ y (mod k) se x-y = m*k para algum m

Equivalência mod 2 n Relação que define uma partição dos inteiros em classes de equivalência x Ξ y (mod k) se x-y = m*k para algum m {..., -16, -8, 0, 8, 16,...} {..., -15, -7, 1, 9, 17,...} {..., -14, -6, 2, 10, 18,...} {..., -13, -5, 3, 11, 19,...} {..., -12, -4, 4, 12, 20,...} {..., -11, -3, 5, 13, 21,...} {..., -10, -2, 6, 14, 22,...} {..., -9, -1, 7, 15, 23,...} 000 001 010 011 100 101 110 111 0 alguns números > 0 alguns números < 0

Representação complemento a 2 Idéia central: é uma representação mod 2 n Se x>= 0 rep 2 (x) = x Se x<0 então rep 2 (x) = 2 n + x menor positivo na classe de equivalência de x

Representação complemento a 2 Idéia central: é uma representação mod 2 n Se x>= 0 rep 2 (x) = x Se x<0 então rep 2 (x) = 2 n + x menor positivo na classe de equivalência de x Exemplos para n = 4: binário Compl-2 binário Compl-2 0000 0 1111-1 0001 1 1110-2 0010 2 1101-3..... 1001-7 0111 7 1000-8 rep 2 (-2) = 2 4 + (-2) = 14 = [1110] rep 2 (-8) = 2 4 + (-8) = 8 = [1000] rep 2 (-1) = 2 4 + (-1) = 15 = [1111] É um mecanismo trabalhoso se o número de bits é muito grande...

Encontrar Representação Binária x<0 rep 2 (x) = 2 n + x

Encontrar Representação Binária x<0 rep 2 (x) = 2 n + x 2 n + x = 2 n - 1 + x + 1

Encontrar Representação Binária x<0 rep 2 (x) = 2 n + x 2 n + x = (2 n - 1) - (- x) + 1 +

Encontrar Representação Binária x<0 rep 2 (x) = 2 n + x 2 n + x = (2 n - 1) - (- x) + 1 1111... 1111

Encontrar Representação Binária x<0 rep 2 (x) = 2 n + x 2 n + x = (2 n - 1) - (- x) + 1 1111... 1111 1 1 = 0 1 0 = 1

Encontrar Representação Binária x<0 rep 2 (x) = 2 n + x 2 n + x = (2 n - 1) - (- x) + 1 1111... 1111 1 1 = 0 1 0 = 1 complemento bit-a-bit!

Resumindo... Encontrar a representação de x < 0 (2 n - 1) - (-x) + 1

Resumindo... Encontrar a representação de x < 0 (2 n - 1) - (-x) + 1 1) obter a representação de -x

Resumindo... Encontrar a representação de x < 0 (2 n - 1) - (-x) + 1 1) obter a representação de -x 2) inverter bit a bit

Resumindo... Encontrar a representação de x < 0 (2 n - 1) - (-x) + 1 1) obter a representação de -x 2) inverter bit a bit 3) somar 1

Exemplo -5 5 0000 0101 1111 1010 + 1 1111 1011 para achar a representação em comp2

Exemplo -5 5 0000 0101 1111 1010 + 1 1111 1011 para achar a representação em comp2 para achar o valor de uma representação 1111 1011 0000 0100 + 1 0000 0101 5-5

Intervalo de Valores Com n bits X n-1 X n-2...x 3 X 2 X 1 X 0 o menor valor representado é -2 n-1 o maior valor representado é 2 n-1-1 1000...0000 0111...1111

Intervalo de Valores Com n bits X n-1 X n-2...x 3 X 2 X 1 X 0 o menor valor representado é -2 n-1 o maior valor representado é 2 n-1-1 1000...0000 0111...1111 Com 8 bits [-2 7, 2 7-1] [-128, 127] Com 16 bits [-2 15, 2 15-1] [-32768, 32767]

Intervalo de Valores Com n bits X n-1 X n-2...x 3 X 2 X 1 X 0 o menor valor representado é -2 n-1 o maior valor representado é 2 n-1-1 1000...0000 0111...1111 Com 8 bits [-2 7, 2 7-1] [-128, 127] Com 16 bits [-2 15, 2 15-1] [-32768, 32767] intervalo é assimétrico! ½ para os negativos ½ para positivos + 0

Intervalos com e sem Sinal Exemplos para n = 16 Decimal Hex Binary UMax 65535 FF FF 11111111 11111111 TMax 32767 7F FF 01111111 11111111 TMin -32768 80 00 10000000 00000000-1 -1 FF FF 11111111 11111111 0 0 00 00 00000000 00000000

Soma e Subtração Em complemento a 2 somas e subtrações usam adição subtração é a soma do complemento achar o complemento é trivial

Soma e Subtração Em complemento a 2 somas e subtrações usam adição subtração é a soma do complemento achar o complemento é trivial Aritmética módulo 2 n garante correção mesmo com sinais diferentes (a menos de overflow) (1-2) (mod 8) (1 + (-2)) mod 8) (1 mod 8) + (-2 mod 8) 1 + 6 7 rep[-1 mod 8]

Exemplos com 4 bits 2 + 3 0010 + 0011 0101 5 7 1 7 + (-1) 0111 + 1111 0110 6 (-3) + 6 1101 + 0110 0011 3 (-1) + (-1) 1111 + 1111 1110 (-2)

Inteiros com Sinal em C O padrão não requer representação complemento a 2 mas a maioria das máquinas o faz Não é boa prática assumir a faixa de valores <limits.h> define constantes para os tipos de dados inteiros INT_MAX, INT_MIN, UINT_MAX

Signed e Unsigned em C Na conversão entre tipos de mesmo tamanho o padrão de bits não muda apenas a interpretação desse padrão

Signed e Unsigned em C Na conversão entre tipos de mesmo tamanho o padrão de bits não muda apenas a interpretação desse padrão short int x = -12345; /* 1100 1111 1100 0111 */

Signed e Unsigned em C Na conversão entre tipos de mesmo tamanho o padrão de bits não muda apenas a interpretação desse padrão short int x = -12345; /* 1100 1111 1100 0111 */ unsigned short ux = (unsigned short) x; /* 53191 */

Signed e Unsigned em C Na conversão entre tipos de mesmo tamanho o padrão de bits não muda apenas a interpretação desse padrão short int x = -12345; /* 1100 1111 1100 0111 */ unsigned short ux = (unsigned short) x; /* 53191 */ ux = 65535; /* 1111 1111 1111 1111 */

Signed e Unsigned em C Na conversão entre tipos de mesmo tamanho o padrão de bits não muda apenas a interpretação desse padrão short int x = -12345; /* 1100 1111 1100 0111 */ unsigned short ux = (unsigned short) x; /* 53191 */ ux = 65535; /* 1111 1111 1111 1111 */ x = (short int) ux; /* -1 */

Operadores Relacionais Operações de comparação (<, <=, etc) devem tratar operandos com e sem sinal existem instruções de máquina para cada caso o compilador C gera o código adequado ao tipo de operandos int a, b; unsigned int c, d;... if (a < b) /* operandos com sinal */... if (c < d) /* operandos sem sinal */...

Comportamento peculiar... Em expressões com operandos de tipo int com e sem sinal, todos os valores são tratados como unsigned int a[2] = {-1, 0}; unsigned int z = 0; if (a[0] < a[1])

Comportamento peculiar... Em expressões com operandos de tipo int com e sem sinal, todos os valores são tratados como unsigned int a[2] = {-1, 0}; unsigned int z = 0; if (a[0] < a[1]) /* true */

Comportamento peculiar... Em expressões com operandos de tipo int com e sem sinal, todos os valores são tratados como unsigned int a[2] = {-1, 0}; unsigned int z = 0; if (a[0] < a[1]) /* true */ if (a[0] < z)

Comportamento peculiar... Em expressões com operandos de tipo int com e sem sinal, todos os valores são tratados como unsigned int a[2] = {-1, 0}; unsigned int z = 0; if (a[0] < a[1]) /* true */ if (a[0] < z) /* false!!! */

Comportamento peculiar... Em expressões com operandos de tipo int com e sem sinal, todos os valores são tratados como unsigned int a[2] = {-1, 0}; unsigned int z = 0; if (a[0] < a[1]) /* true */ if (a[0] < z) /* false!!! */ if (a[0] < 0)

Comportamento peculiar... Em expressões com operandos de tipo int com e sem sinal, todos os valores são tratados como unsigned int a[2] = {-1, 0}; unsigned int z = 0; if (a[0] < a[1]) /* true */ if (a[0] < z) /* false!!! */ if (a[0] < 0) /* true */

Comportamento peculiar... Em expressões com operandos de tipo int com e sem sinal, todos os valores são tratados como unsigned int a[2] = {-1, 0}; unsigned int z = 0; if (a[0] < a[1]) /* true */ if (a[0] < z) /* false!!! */ if (a[0] < 0) /* true */ if (a[0] < 0U)

Comportamento peculiar... Em expressões com operandos de tipo int com e sem sinal, todos os valores são tratados como unsigned int a[2] = {-1, 0}; unsigned int z = 0; if (a[0] < a[1]) /* true */ if (a[0] < z) /* false!!! */ if (a[0] < 0) /* true */ if (a[0] < 0U) /* false!!! */

Extensão de Representação Conversões que aumentam o tamanho char para short, short para int, int para long,...

Extensão de Representação Conversões que aumentam o tamanho char para short, short para int, int para long,... Converter representação com w bits para uma representação com w+k bits, mantendo o valor X w X k w

Extensão com e sem Sinal Extensão sem sinal (zero extension) adicionar k bits 0 à esquerda X w X k w

Extensão com e sem Sinal Extensão sem sinal (zero extension) adicionar k bits 0 à esquerda Extensão para complemento a 2 (sign extension) adicionar k cópias do bit mais significativo à esquerda X w X k w

Exemplo de Extensão com Sinal rep 2 (-3) em 8 bits 2 8 + (-3) 253 1111 1101 rep 2 (-3) em 16 bits 2 16 + (-3) 65533 1111 1111 1111 1101

Exemplo de Extensão com Sinal rep 2 (-3) em 8 bits 2 8 + (-3) 253 1111 1101 rep 2 (-3) em 16 bits 2 16 + (-3) 65533 1111 1111 1111 1101 2 8 + (-3) + x = 2 16 + (-3)

Exemplo de Extensão com Sinal rep 2 (-3) em 8 bits 2 8 + (-3) 253 1111 1101 rep 2 (-3) em 16 bits 2 16 + (-3) 65533 1111 1111 1111 1101 2 8 + (-3) + x = 2 16 + (-3) x = 2 16 + (-3) - 2 8 - (-3)

Exemplo de Extensão com Sinal rep 2 (-3) em 8 bits 2 8 + (-3) 253 1111 1101 rep 2 (-3) em 16 bits 2 16 + (-3) 65533 1111 1111 1111 1101 2 8 + (-3) + x = 2 16 + (-3) x = 2 16 + (-3) - 2 8 - (-3) 1 0000 0000 0000 0000 1 0000 0000 1111 1111 0000 0000

Truncamento Conversões que diminuem o tamanho short para char, int para short, long para int,...

Truncamento Conversões que diminuem o tamanho short para char, int para short, long para int,... Converter uma representação com w+k bits para uma representação com w bits truncamento remover os k bits mais significativos nem sempre é possível manter o valor!

Truncamento Conversões que diminuem o tamanho short para char, int para short, long para int,... Converter uma representação com w+k bits para uma representação com w bits truncamento remover os k bits mais significativos nem sempre é possível manter o valor! 0000 1001 9 1001 9 1001-7 unsigned signed

Truncamento Conversões que diminuem o tamanho short para char, int para short, long para int,... Converter uma representação com w+k bits para uma representação com w bits truncamento remover os k bits mais significativos nem sempre é possível manter o valor! 0000 1001 9 0001 1001 25 1001 9 unsigned 1001 9 unsigned 1001-7 signed 1001-7 signed

Overflow em Complemento a 2 Resultado não é representável em n bits Operandos: w bits Soma real: w+1 bits Descarta bit w+1 u + v u + v TAdd w (u, v)

Overflow em Complemento a 2 Resultado não é representável em n bits Operandos: w bits Soma real: w+1 bits Descarta bit w+1 u + v u + v TAdd w (u, v) Hardware indica situações de overflow signed e unsigned Mas a indicação é ignorada... compilador C não gera testes