RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf ·...

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

Transcript of RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf ·...

Page 1: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Representação de InteirosRepresentação de Inteiros

Page 2: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Como utilizar os bits da palavra para representar inteiros ?

• Inteiros sem sinal (não negativos) e com sinal (negativos, zero e positivos)

• Tipos inteiros em C

declaração CMínimo Máximo Mínimo Máximo

char -127 127 -128 127unsigned char 0 255 0 255shot [int] -32.767 32.767 -32.768 32.767unsigned short[int] 0 63.535 0 63.535int -32.767 32767 -2.147.483.648 2.147.483.647unsigned [int] 0 65.535 0 4.294.967.295

Garantido 32-bit típico

Page 3: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Representação de inteiros não negativos

• Inteiro sem sinal codificado por um vetor com w bits [xw-1, xw-2, ...,x0]

– B2U(X)= xi.2i

– B2U([0101])=1.20 + 0.21 + 1.22+0.23 = 5– B2U([1101])=1.20 + 0.21 + 1.22+1.23 = 13

• Intervalo de valores a ser representado: – 0 a (2w - 1)

i=0

w-1

Page 4: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Representação de inteiros com sinal

• Inteiro com sinal codificado por um vetor com w bits [xw-1, xw-2, ...,x0] utilizando representação complemento a 2

– B2T(X)=-x w-12 w-1 + xi.2i

– B2T([0101])=- 0.23 +1.20 + 0.21 + 1.22 = +5

– B2T([1101])=- 1.23 +1.20 + 0.21 + 1.22 = -3

• Bit mais significativo é o bit de sinal: 1 para negativos, 0 para positivos

• Intervalo de valores a ser representado: – -2w-1 a +(2w-1-1)

i=0

w-2

Page 5: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Outras representações de inteiros com sinal

• Sinal e magnitude– B2S(X)=(-1).x w-1 .( xi.2i )

– Duas representações do 0

• [00 ... 00] e [10 ... 00]

• Complemento a 1– B2O(X)=-x w-1 (2w-1-1) + ( xi.2i )

– Duas representações do 0

• [00 ... 00] e [11 ... 11]

• Máquinas modernas utilizam complemento a 2

i=0

w-2

i=0

w-2

Page 6: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Dificuldades de utilizar as outras representações

• Dificuldades para implementação:– Dois elementos diferentes para efetuar soma e subtração– Tempo gasto na manipulação de sinais (tipo de operação e sinal do

resultado)– Dupla representação do 0

Page 7: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Representação de Números Negativos em Complemento

• Vantagens da utilização de aritmética de complemento a 2:

– uma única representação para o zero– necessita apenas um circuito somador para operações de soma e

subtração

• Assimetria na quantidade de números representados

– -2w-1 a +(2w-1-1)

Page 8: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Valores interessantes para diversos tamanhos de palavra

Quantidade8 16 32 64

Umax 255 65.535 4.294.967.295 18.446.744.073.709.551.615Tmax 127 32.767 2.147.483.647 9.223.372.036.854.775.807Tmin -128 -32.768 -2.147.483.648 -9.223.372.036.854.775.808

-1 0xFF 0xFFFF 0xFFFFFFFF 0xFFFFFFFFFFFFFFFF0 0x00 0x000 0x00000000 0x0000000000000000

Tamanho da palavra w

Page 9: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Valores numéricos sem sinal X com sinal

X B2U(X) B2T(X)0000 0 00001 1 10010 2 20011 3 30100 4 40101 5 50110 6 60111 7 71000 8 -81001 9 -71010 10 -61011 11 -51100 12 -41101 13 -31110 14 -21111 15 -1

• Exemplo para w =4

• Mesma codificação para valores não negativos

• Cada padrão de bits representa um único valor inteiro

• Cada inteiro representável possui uma única codificação em bits

Page 10: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Conversão de representação com sinal para sem sinal

• A linguagem C permite o casting (moldagem) de uma representação com sinal para sem sinal

• Não muda a representação em bits• Valores não negativos permanecem os mesmos

– ux = 15213

• Valores negativos mudam para valores grandes positivos

– uy = 50323

short int x = 15213;unsigned short int ux = (unsigned short) x;short int y = -15213;unsigned short int uy = (unsigned short) y;

Page 11: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Relação entre representação C2 e sem sinal

XT2B B2Ux ux

T2UComplemento a 2 Sem sinal

Mantém o mesmo padrão de bits

+ + ...+ + + +

- + ...+ + + +

ux

x

w-1 0

2w-1 - - 2w-1 = 2*2w-1 = 2w

-ux = x x > = 0x+2w x < 0

Page 12: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Relação entre valores numéricos sem sinal X com sinal

Peso1 1 1 1 12 1 2 1 24 0 0 0 08 0 0 0 0

16 1 16 1 1632 0 0 0 064 0 0 0 0128 1 128 1 128256 0 0 0 0512 0 0 0 0

1024 1 1024 1 10242048 0 0 0 04096 0 0 0 08192 0 0 0 016384 1 16384 1 1638432768 1 -32768 1 32768

-15213 50323

Soma -15213 50323uy=y+2*32768=y+65536

Page 13: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Conversão entre complemento a 2 e sem sinal

• T2U(x)=B2U(T2B(x))=x +xw-12w

• Exemplo:– X = 1010– C2 = -6– Sem sinal = 10

0

2w–1

2w

Sem sinal

Complemento a 20

+2w–1

–2w–1

Page 14: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Conversão entre sem sinal e complemento a 2

• U2T(x)=B2T(U2B(x))=x -xw-12w

• Exemplo:– X = 1010– Sem sinal = 10– C2 = -6

Sem sinal

Complemento a 20

2w–1

2w

0

+2w–1

–2w–1

Page 15: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Uso de representações com sinal e sem sinal em C

• Constantes – São consideradas como inteiros com sinal– Utiliza o sufixo “U” para indicar sem sinal

• 0U, 42356U

• Casting– Casting explícito entre repr. com sinal e sem sinal

int tx, ty;unsigned ux, uytx = (int) ux;uy = (unsigned) ty;

– Casting implícito ocorre através de atribuições e chamadas de procedimentotx = ux;uy = ty;

Page 16: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Surpresas em casting

• Em uma expressão com valores com sinal e sem sinal, os valores com sinal são tratados como sem sinal

Expressão Tipo Avaliação0 == 0U sem sinal 1-1 < 0 com sinal 1-1 < 0U sem sinal 0*2147483647 > -2147483648 com sinal 1214783647U > -2147483648 sem sinal 0*2147483647 > (int) 2147483648U com sinal 1*-1 > -2 com sinal 1(unsigned) -1 > -2 sem sinal 1

Page 17: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Extensão de sinal

• Dado um inteiro x representado com sinal utilizando-se w bits, deseja-se representá-lo com k+w bits

• Faça k cópias do bit de sinal

• X´ = xw-1, ..., xw-1, xw-1 , x w-2, ..., x0

K cópias de BMS

Page 18: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Exemplo de extensão de sinal

short int x = 15213;int ix = (int) x;short int y = -15213;int iy = (int) y;

Decimal Hexa Bináriox 15213 3B 6D 00111011 01101101ix 15213 00 00 3B 6D 00000000 0000000 00111011 01101101y -15213 C4 93 11000100 10010011iy -15213 FF FF C4 93 11111111 111111111 11000100 10010011

Page 19: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Porque funciona a extensão de sinal ?

• B2Tw+k([xw-1, ..., xw-1, xw-1, xw-2, ..., x0])= B2Tw([xw-1,xw-2, ..., x0])

• B2Tw+1([xw-1, xw-1, xw-2, ..., x0])= -xw-1 2w + xi2i = -xw-1 2w + xw-1 2w-1 + xi2i = -xw-1 (2w -2w-1) + xi2i = -xw-1 2w-1 + xi2i =B2T([xw-1, xw-2, ..., x0])

Page 20: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Ordem dos castings

short int x = 15213;short int y = -15213;unsigned iux = (unsigned) (unsigned short) x;unsigned iuy = (unsigned) (unsigned short) y;unsigned uix = (unsigned) (int) x;unsigned uiy = (unsigned) (int) y;unsigned uuy = y;

iux = 15213: 00000000 00000000 00111011 01101101iuy = 50323: 00000000 00000000 11000100 10010011uix = 15213: 00000000 00000000 00111011 01101101uiy = 4294952083: 11111111 11111111 11000100 10010011uuy = 4294952083: 11111111 11111111 11000100 10010011

Page 21: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Truncando números

• O que fazer quando o número de bits que pode ser utilizado para representar um número é reduzido?int x = 53191;short sx = (short) x; /* -12345 */int y = sx; /* -12345 */

• Para truncar um número X representado por wbits para k bits, abandonam-se os w-k bits mais significativos

• Para um número sem sinal, este truncamento equivale a obter x mod 2k

• Para um número em complemento a 2, teremos U2T (x mod 2k)

Page 22: RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf · representar inteiros ? • Inteiros sem sinal (não negativos) e com sinal (negativos,

Sistemas de Computação

Quando usar números sem sinal ?

• Poucas linguagens suportam números sem sinal

• Útil para tratar seqüência de bits sem interpretação numérica

– flags descrevendo condições booleanas– endereços– pacotes matemáticos para aritmética modular