特定整数在运行时需要多少字节?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特定整数在运行时需要多少字节?相关的知识,希望对你有一定的参考价值。

这可能是一个重复的问题,但我在搜索时无法找到类似的问题。

我正在寻找一种简单有效的方法来确定int在运行时需要多少个有符号字节。

例如,考虑具有以下值的int

1     - Requires 1 Byte
10    - Requires 1 Byte
128   - Requires 2 Bytes
1024  - Requires 2 Bytes
32768 - Requires 3 Bytes
...
Integer.MAX_VALUE - Requires 4 Bytes

编辑:对我来说很明显,int需要4个bytes的内存,无论其值如何。不过,如果不是这样,我正在寻找该值占用的字节数。

理想情况下,我正在寻找的答案利用位操作,并为输入0返回值1。

答案

根据您的要求提供一线解决方案:

public int bytesCount(int n) {
    return n < 0 ? 4 : (32 - Integer.numberOfLeadingZeros(n)) / 8 + 1;
}

32 - Integer.numberOfLeadingZeros(n)返回最高一位的位置。之后,您可以轻松计算所需的字节数。

另一答案

我确信有人有一个更有效的方法来做到这一点,但简单易懂的是看到2的上限能力高于它,因此你现在可以适应多少位,那么你可以除以8得出你需要多少字节。

int bytesInInt(int i) {
    int exp = 0;
    while (Math.pow(2,exp) < i) {
        exp++;
    }
    return ((exp + 1) / 8) + 1;
}
另一答案

您可以根据数字边界检查它,这些数字可以存储在1个字节(byte),2个字节(short),3个字节中。

int bytes_needed(int n){
    if(n >= -128 && n <= 127){
        return 1;
    } else if(n >= -32768 && n <= 32767){
        return 2;
    } else if(n >= -8388608 && n <= 8388607){
        return 3;
    } else {
        return 4;
    }
}

以上是关于特定整数在运行时需要多少字节?的主要内容,如果未能解决你的问题,请参考以下文章

以下代码片段的时间复杂度是多少?

如何在安装 spark 2.4.4 后尝试运行 pyspark 时修复“TypeError:需要一个整数(获取类型字节)”错误

需要对特定 R 代码片段的解释

网络技术理论:包片段帧数据报和段

Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]

网络技术理论:包片段帧数据报和段