Faixa de tipos de dados assinados e não assinados

0

Então, se char é 1 byte , então são 8 bits, certo?

Então 2 ^ 8 = 256 e 0 a 255 é o intervalo de caracteres?

Como isso funciona com ints assinados e não assinados? Um int é de 4 bytes, então 32 bits, então 2 ^ 32 .    2 ^ 31 - 1 dar-lhe o intervalo positivo de ints assinado então o que acontece com o 32º bit? É usado para o sinal? Como um sinal seria armazenado na memória?

    
por user341814 09.07.2014 / 23:39

1 resposta

0

Se o tipo de dados for definido como um tipo assinado, haverá diferentes tipos de representação - principalmente a representação de magnitude assinada e a representação de complemento de dois.

Para uma representação de magnitude com sinal, sim, o bit de sinal foi armazenado como o bit mais significativo (MSB, ou seja, o bit mais à esquerda). MSB de 0 representa um valor positivo, enquanto 1 representa um valor negativo. Exemplo:

 7 = 00000111
-7 = 10000111

Isso é simples e (relativamente) legível por humanos, no entanto, os tipos inteiros geralmente não são não mantidos dessa forma para dois problemas:

(1) Existem duas representações para zero, +0 e -0. Torna problemático comparar os números, pois cria um caso especial.

(2) Não é fácil fazer computação (tão simples quanto adicionar e subtrair). Adicionando dois números positivos, número positivo para número negativo, número negativo para número positivo e adicionando dois números negativos são quatro casos de uso diferentes. por exemplo. 7 + 6 é direto

          1   Carry bit
 7 = 00000111
 6 = 00000110  (Logic for add)
..   ........
13 = 00001101

Ao calcular 7 + (-6) significa a lógica de subtração a ser usada no lugar

 7 = 00000111
-6 = 10000110  (Logic for subtraction)
..   ........
 1 = 00000001

A faixa para um número de 8 bits é portanto - (2 ^ 7) +1 a 2 ^ 7-1 (isto é, -127 a +127, com dois zeros +0 e -0). A representação de magnitude assinada é usada principalmente para manter os números flutuantes.

E isso leva à representação do complemento dos dois. Números positivos são representados da mesma forma que a representação de magnitude assinada. Alterar o bit de sinal leva duas etapas: (1) Inverta todos os bits (altere todos os 0 para 1 e 1 para 0) (2) Adicione um.

Exemplo, para obter a representação de -6, seguimos os passos abaixo

 6 = 00000110
 Invert all bits:  11111001
 Add one: 11111010

Então -6 é representado como 11111010 . Com a representação do complemento de dois, você ainda pode ler o sinal do MSB; enquanto há apenas uma representação para zero: 00000000 .

É fácil fazer computação com números binários em representação de complemento de dois também - adicionar está adicionando. Vamos ver novamente como isso funciona para calcular 7 + (- 6):

     1111111   Carry bit
 7 = 00000111
-6 = 11111010  (Logic for add)
..   ........
 1 = 00000001

O intervalo para um número de 8 bits é portanto - (2 ^ 7) a 2 ^ 7-1 (isto é, -128 a +127). Observe que o intervalo é diferente da representação de magnitude assinada.

    
por 10.07.2014 / 04:35

Tags