【问题标题】:How many bytes does a specific integer require at runtime?特定整数在运行时需要多少字节?
【发布时间】:2018-06-03 11:29:04
【问题描述】:

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

我正在寻找一种简单、有效的方法来确定 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。

【问题讨论】:

  • 字节为 8 位。您需要确定您的号码需要多少位。
  • @ThorbjørnRavnAndersen 我正在寻找我的号码需要多少bytes。
  • 在 Java 中,int 总是需要 4 字节的内存,无论其内容如何。
  • @Alnitak 我知道,但我正在寻找该数字占用的确切字节数。
  • 当您向缓冲区添加了 4 个 1 字节的值时,您如何知道它是 4、2 还是 1 值?如何使用这些值?

标签: java memory binary int byte


【解决方案1】:

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

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

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

【讨论】:

【解决方案2】:

我相信有人有一种更有效的方法来做到这一点,但一个简单易懂的方法是查看 2 的上限幂比它高多少,因此你现在可以容纳多少位,然后你可以除以 8 来计算你需要多少字节。

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

【讨论】:

    【解决方案3】:

    您可以根据可以存储在 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 2019-05-04
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      相关资源
      最近更新 更多