字节数组实际长度
Byte array actual length
字节数组的实际长度是多少?例如:
int x = 123 equals to byte[] b = 0111 1011
现在,如果我想计算出所述整数的长度,我会使用 b.length
,但据我所知,长度只能是 8 的倍数,因为每个字节都代表一个强制性数字。是字节数组的情况还是我遗漏了什么?
您可以有 byte
个不表示整数值中的字节的数组。
因此,它们的长度(通过获取数组的 length
public 字段推断)是完全任意的。
from what I gather, length can be only multiples of 8
我认为您对位和字节有点混淆。一个字节是 8 位。字节数组的.length
是它的字节长度,总是字节的整数,是8位的倍数。
一个int在内存中总是4个字节,也就是32位。您的示例 int 123 具有以下位表示形式:
0000 0000 0000 0000 0000 0000 0111 1011
字节数组可以是任意整数字节长,因此 b.length
是您创建它的任意大小。它不需要是整数个整数,但是如果你想在整数和字节数组之间转换,如果你总是存储整数会更简单。这意味着,使这些字节数组的长度为 4 字节的倍数。
如果你只是想知道一个用二进制写成的数字的长度,最简单的方法就是将它转换成字符串并测量它的长度。该方法 Integer.numberOfLeadingZeros
可能对您也有用。
int x = 123;
System.out.println(Integer.toBinaryString(x)); // 1111011
System.out.println(Integer.toBinaryString(x).length()); // 7
System.out.println(x == 0 ? 1 : (32 - Integer.numberOfLeadingZeros(x))); // 7
字节数组的实际长度是多少?例如:
int x = 123 equals to byte[] b = 0111 1011
现在,如果我想计算出所述整数的长度,我会使用 b.length
,但据我所知,长度只能是 8 的倍数,因为每个字节都代表一个强制性数字。是字节数组的情况还是我遗漏了什么?
您可以有 byte
个不表示整数值中的字节的数组。
因此,它们的长度(通过获取数组的 length
public 字段推断)是完全任意的。
from what I gather, length can be only multiples of 8
我认为您对位和字节有点混淆。一个字节是 8 位。字节数组的.length
是它的字节长度,总是字节的整数,是8位的倍数。
一个int在内存中总是4个字节,也就是32位。您的示例 int 123 具有以下位表示形式:
0000 0000 0000 0000 0000 0000 0111 1011
字节数组可以是任意整数字节长,因此 b.length
是您创建它的任意大小。它不需要是整数个整数,但是如果你想在整数和字节数组之间转换,如果你总是存储整数会更简单。这意味着,使这些字节数组的长度为 4 字节的倍数。
如果你只是想知道一个用二进制写成的数字的长度,最简单的方法就是将它转换成字符串并测量它的长度。该方法 Integer.numberOfLeadingZeros
可能对您也有用。
int x = 123;
System.out.println(Integer.toBinaryString(x)); // 1111011
System.out.println(Integer.toBinaryString(x).length()); // 7
System.out.println(x == 0 ? 1 : (32 - Integer.numberOfLeadingZeros(x))); // 7