2017-06-30 9 views
1

J'ai des nombres inférieurs à 16 et je veux les stocker le plus petit possible. Je convertis actuellement mon entier en octet mais je n'ai pas besoin de tout l'octet. Je pense que je n'ai besoin que de 4 bits pour contenir mon numéro. Je veux utiliser le moins d'octets possible.Comment stocker entiers dans le moins de bits possible en Java

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

myArray.length est toujours inférieur à 12. Comment puis-je utiliser comme quelques bits pour stocker à ma solutionLength variable?

+1

Hors sujet: une raison quelconque vous devez vous soucier de la mémoire tant? Juste curieux – ZeldaZach

+0

Parce que je stocke environ 800 millions de la valeur retournée dans un tableau. @ZeldaZach – ProgrammingCuber

+3

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

Répondre

4

Il est impossible d'avoir des types de données inférieurs à un octet. Si vous avez plusieurs numéros à stocker, vous pouvez faire un tour: stocker deux valeurs de 4 bits dans un octet.

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

Ici, vous stockez deux nombres dans un octet. Pour les tenter d'y accéder:

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

Mais entier serait la meilleure solution pour elle en évitant les conversions de type

3

Vous pouvez utiliser un tableau d'octets. Chaque octet peut contenir deux valeurs, l'une dans les 4 bits supérieurs et l'autre dans les bits inférieurs. Par exemple. 0x1F contient 1 et F. Et vous devez créer une classe qui calculera les valeurs par index.