Onde está a assinatura de tipos integrais assinados armazenados? (Em Java)
-
13-09-2019 - |
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?
Solução
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 é
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.