Pergunta

O tipo de dados Java byte, por exemplo, contém dados de -128 a 127 em um único byte no armazenamento. Para habilitar a distingush entre - 1 a -128 0-127 exigiria dados extras que levaria o tipo de dados obver seu armazenamento alocado. É certo que ele levaria apenas 1 bit extra, mas ainda passa por cima.

Como o java fazer isso?

Foi útil?

Solução

complemento de dois :

Os tipos primitivos são definidos a ser o mesmo em todas as máquinas e em todas as implementações, e são vários tamanhos de IEEE números complemento de dois inteiros, simples e dupla precisão 754 padrão de ponto flutuante, um tipo boolean, e um Unicode tipo de caractere caractere. - The Java Language Specification: Introdução

Você pode imaginá-lo como um número inteiro de 0 a 255 a partir do qual 128 é sempre subtraído.

Mais técnica: um número inteiro pode (e) ser negada (positivo ? negativo ou vice-versa), invertendo seus bits e adicionando uma. Esta é quase como um complemento ( que simplesmente inverte todos os bits, daí complementar mas um complemento tem o problema que ele tem dois zeros diferentes:. +0 e -0 (números de ponto flutuante tem isso também, mas por outras razões e mais úteis ?) resolve complemento de dois isso. pela adição de um, e estendendo-se desse modo a gama de valores negativos (que por isso que é -128 .. 127).

De alguma maneira você poderia dizer que o sinal é de fato "armazenado" no primeiro bit do número. Portanto, sua observação de que ele precisa de um pouco de armazenamento está correto. Mas o intervalo numérico de um byte (positivo ou negativo, ignorando o sinal) só precisa de 7 bits, então você tem um byte novamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top