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

我正在寻找一种简单高效的方法来确定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个byte的内存,而不管其值如何。不过,我正在寻找如果不是这种情况,该值将占用的字节数。

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

最佳答案

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

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


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

10-01 18:09