Gama de tipos de dados assinados e não assinados

Gama de tipos de dados assinados e não assinados

Então, se charfor 1 byte, são 8 bits, certo?

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

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

Responder1

Se o tipo de dados for definido como um tipo assinado, existem diferentes tipos de representação - principalmente a representação de magnitude com sinal e a representação em complemento de dois.

Para 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, porém os tipos inteiros geralmente sãonãomantido desta forma por dois problemas:

(1) Existem duas representações para zero, +0 e -0. Isso torna difícil comparar números, pois cria um caso especial.

(2) Não é fácil fazer cálculos (tão simples como somar e subtrair). Adicionar dois números positivos, um número positivo a um número negativo, um número negativo a um número positivo e adicionar 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 que a lógica de subtração será usada

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

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

E isso leva à representação em complemento de dois. Os números positivos são representados da mesma forma que a representação de magnitude com sinal. A alteração do bit de sinal leva duas etapas: (1) Inverter todos os bits (alterar todos os 0 para 1 e 1 para 0) (2) Adicionar um.

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

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

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

Também é fácil fazer cálculos com números binários na representação em complemento de dois - somar é somar. Vamos ver novamente como funciona 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 (ou seja, -128 a +127). Observe que o intervalo é diferente da representação da magnitude com sinal.

informação relacionada