Java 将字节分成两个较小的数字

Java 将字节分成两个较小的数字,java,byte,Java,Byte,喜欢这个话题。我写的应用程序,我必须节省尽可能多的内存。我想将字节分成两部分,每个部分4位(0到15之间的数字)-如何保存并在以后读取这些值?您可以将低位作为 byte lower = b & 0xF; 高位为 byte higher = (b >> 4) & 0xF; 返回到一个字节 byte b = (byte) (lower + (higher << 4)); byte b=(byte)(lower+(higher如果您想要在一个字节中存

喜欢这个话题。我写的应用程序,我必须节省尽可能多的内存。我想将字节分成两部分,每个部分4位(0到15之间的数字)-如何保存并在以后读取这些值?

您可以将低位作为

byte lower = b & 0xF; 
高位为

byte higher = (b >> 4) & 0xF; 
返回到一个字节

byte b  = (byte) (lower + (higher << 4));

byte b=(byte)(lower+(higher如果您想要在一个字节中存储两个数字(范围0-15),下面是一个如何保存和恢复它们的示例。请注意,您必须确保原始数字在允许的范围内,否则这将无法工作

    // Store both numbers in one byte
    byte firstNumber = 10;
    byte secondNumber = 15;
    final byte bothNumbers = (byte) ((firstNumber << 4) | secondNumber);

    // Retreive the original numbers
    firstNumber = (byte) ((bothNumbers >> 4) & (byte) 0x0F);
    secondNumber = (byte) (bothNumbers & 0x0F);
//将两个数字存储在一个字节中
字节firstNumber=10;
字节数=15;
最终字节bothNumbers=(字节)((firstNumber>4)和(字节)0x0F);
第二个数字=(字节)(两个数字和0x0F);

同样值得注意的是,如果你想节省尽可能多的内存,你不应该首先使用Java。JVM本身已经在消耗内存。本机语言更适合这一要求。

你能解释一下将一个字节分成两个字节如何帮助你节省内存空间吗?@afsantos没有没有半字节数据类型。@VisruthCV抱歉,这纯粹是胡说八道。计算机已将12存储为1100。计算机只知道二进制。您将数字的表示形式与其值相混淆。了解移位和掩码操作--
,&,
。有时有点笨拙,但将几个n-b组合起来基本上非常简单它将值转换为一个字节或int,效率并不特别低。是的,
boolean
值在大多数实现中至少占用一个字节。在一些实现中,它们在堆栈或实例字段中实际上可能占用一个4字节的字,尽管通常一个数组中只有8位。对于我工作的JVM,我们考虑过使用1位数组,但它不是oo凌乱,好处太少。几乎可以工作了-似乎b>>3给出了正确的值-现在如何将值保存到一个字节中?缺少
&
,请使用
而不是添加来组合位字段。修复了所需的强制转换和屏蔽。