Domanda

Il tipo di dati Java byte per esempio contiene i dati da -128 a 127 in un singolo byte in deposito. Per consentire a distingush tra - 1 a -128 da 0 a 127 richiederebbe dati aggiuntivi che porterebbe il tipo di dati obver sua memoria allocata. Certo sarebbe solo 1 po 'di più, ma va ancora oltre.

In che modo java fare questo?

È stato utile?

Soluzione

complemento a due :

  

I tipi primitivi sono definiti per essere la stessa su tutte le macchine e in tutte le implementazioni, e sono vari formati di interi in complemento a due, 754 numeri a virgola mobile standard, singola e doppia precisione IEEE, un tipo booleano, e Unicode tipo di carattere char. - La specifica Java Language: Introduzione

Si può immaginare come un numero intero compreso tra 0 e 255 da cui 128 è sempre sottratti.

Più tecnica: un numero intero può (e volontà) essere negata (→ versa negativo o vice positivo) invertendo i bit e aggiungendo una. Si tratta di quasi come complemento a uno ( che semplicemente inverte tutti i bit-quindi complementare ma un complemento ha il problema che ha due differenti zeri:. +0 e -0 (numeri a virgola mobile hanno anche questo, ma per altre ragioni e ☺ più utile) complemento a due risolve questo. aggiungendo uno, e prolungando così la gamma di valori negativi (ecco perché è -128 .. 127).

In qualche modo si potrebbe dire che il segno è infatti "immagazzinata" nel primo bit del numero. Così la vostra osservazione che ha bisogno di un po 'di stoccaggio è corretta. Ma l'intervallo numerico di un byte (positiva o negativa, ignorando il segno) ha solo bisogno di 7 bit, in modo da avere di nuovo un byte.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top