返回存储长值所需的字节数的java函数
我创建了一个函数,返回存储长值所需的字节数。该值必须位于[Long.MIN_VALUE, Long.MAX_VALUE].
private static final int ONE_BYTE_MAX = (1 << 7) - 1; // 127
一个字节的最大值为127
private static final int ONE_BYTE_MIN = -(1 << 7); // -128
一个字节的最小值为-128
private static final int TWO_BYTE_MAX = (1 << 15) - 1;
private static final int TWO_BYTE_MIN = -(1 << 15);
private static final int THREE_BYTE_MAX = (1 << 23) - 1;
private static final int THREE_BYTE_MIN = -(1 << 23);
private static final long FOUR_BYTE_MAX = (1L << 31) - 1;
private static final long FOUR_BYTE_MIN = -(1L << 31);
private static final long FIVE_BYTE_MAX = (1L << 39) - 1;
private static final long FIVE_BYTE_MIN = -(1L << 39);
private static final long SIX_BYTE_MAX = (1L << 47) - 1;
private static final long SIX_BYTE_MIN = -(1L << 47);
private static final long SEVEN_BYTE_MAX = (1L << 55) - 1;
private static final long SEVEN_BYTE_MIN = -(1L << 55);
方法
public static int getBytesForLongValue(long value) {
if (value >= ONE_BYTE_MIN && value <= ONE_BYTE_MAX) {
return 1;
} else if (value >= TWO_BYTE_MIN && value <= TWO_BYTE_MAX) {
return 2;
} else if (value >= THREE_BYTE_MIN && value <= THREE_BYTE_MAX) {
return 3;
} else if (value >= FOUR_BYTE_MIN && value <= FOUR_BYTE_MAX) {
return 4;
}else if (value >= FIVE_BYTE_MIN && value <= FIVE_BYTE_MAX) {
return 5;
}else if (value >= SIX_BYTE_MIN && value <= SIX_BYTE_MAX) {
return 6;
}else if (value >= SEVEN_BYTE_MIN && value <= SEVEN_BYTE_MAX) {
return 7;
} else {
return 8;
}
}
在java中有一种简单的方法吗
# 1 楼答案
在这个答案中,我们重点关注所需的位的数量。从那时起,字节数可以通过ceil除以8来计算
我假设我们将所有数字存储在2的补码中,因此我们需要5位而不是4位来存储数字8dec=01000bin,依此类推
对于适合于
long
的数字结果
对于更大的数字
如果您对较大的数字感兴趣,可以将它们存储在
BigInteger
中。幸运的是,BigInteger
为您提供了一种非常方便的方法:如果您不关心大数字,但想使用
bitLength()
使用# 2 楼答案
将
Long
转换为Binary String
,然后获取String
的length
注意:负数存储为2的恭维。因此,
-10
将存储为1111111111111111111111111111111111111111111111111111111111110110
。因此,您将获得8
作为输出(这是正确的),而不是2
# 3 楼答案
您可以使用
for
循环将参数除以128,然后计算达到0所需的iteraction数# 4 楼答案
您可以创建一个包含两个字段的枚举:min和max。然后迭代该枚举值,循环中只有一个if语句:
编辑:
查看这些枚举定义,实际上很容易将其转换为一个循环:
# 5 楼答案
您需要找到最高的1位,然后才能知道需要多少字节
方法^{} 可用于此
由于long有
Long.SIZE
位(实际上是64位),因此很容易计算,但需要对零值和负值进行特殊处理可以将其缩短为(如果您想显得有点模糊):
解决方案只需一行代码,不需要循环
# 6 楼答案
虽然我认为在Java中,对于long原语类型,我们应该将字节数保留为8,但有另一种方法可以计算保存long值(包括符号位)的最小字节数。该方法还可用于计算调整方法签名的任何整数的大小:
然而,代码如下:
输出为(如预期的那样)
八, 8. 三,