2017-06-30 2 views
1

Ich habe Zahlen kleiner als 16 und ich möchte sie auf die kleinste mögliche Weise speichern. Ich konvertiere momentan meine ganze Zahl in ein Byte, aber ich brauche nicht das ganze Byte. Ich denke, ich brauche nur 4 Bits, um meine Nummer zu halten. Ich möchte so wenig wie möglich von einem Byte verwenden.So speichern Sie Integer in möglichst wenigen Bits in Java

byte solutionLength = (byte) myArray.length; 
return solutionLength; 

myArray.length ist immer weniger als 12. Wie kann ich so wenig Bits verwenden, um meine Variable solutionLength zu speichern?

+1

Aus Thema: Gibt es Gründe, Sie so viel über das Gedächtnis zu kümmern? Nur neugierig – ZeldaZach

+0

Weil ich etwa 800 Millionen des zurückgegebenen Wertes in einem Array speichern. @ZeldaZach – ProgrammingCuber

+3

['BitSet'] (https://docs.oracle.com/javase/8/docs/api/java/util/BitSet.html) –

Antwort

4

Es ist unmöglich, Datentypen kleiner als ein Byte zu haben. Wenn Sie mehrere Zahlen speichern möchten, können Sie einen Trick machen: Speichern Sie zwei 4-Bit-Werte in einem Byte.

byte storage = (byte) (((byte)myArray.length << 4) | (byte)myArray2.length); 

Hier speichern Sie zwei Zahlen in einem Byte. Für den Zugriff auf sie versuchen:

byte myArrayLength = (byte) ((storage & 0xf0) >> 4); 
byte myArrayLength2 = (byte) (storage & 0x0f); 

Aber integer wäre es bessere Lösung nach Art vermeiden Konvertierungen

3

Sie können Byte-Array verwenden, jedes Byte enthält zwei Werte - einen in höheren 4 Bits und einen anderen in niedrigeren für Bits. Z.B. 0x1F enthält 1 und F. Und Sie müssen eine Klasse erstellen, die Werte nach Index berechnet.

Verwandte Themen