Recuperação Matemática: Números Inteiros e Racionais Negativos
RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf ·...
Transcript of RepresentaRepresentaçção de Inteirosão de Inteirossimone/scminter/contaulas/4_INT.pdf ·...
Sistemas de Computação
Representação de InteirosRepresentação de Inteiros
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
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
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
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
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
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)
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
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
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;
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
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
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
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
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;
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
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
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
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])
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
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)
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