Java,存放大于127的字节
Java, store in byte higher value than 127
对于一个赋值,我得到了一些字节,对它们的二进制值进行了一些计算,并且必须 return 在字节数组中计算 Stuff。
我现在的问题是,那个字节最多只能存储 127,但我的值最多可以达到 2^8-1 (11111111)。我已经尝试将它转换为十六进制,但它当然也不起作用。
那么,这可能吗?如果可以的话,那怎么可能,或者那样做是不可能的?
通常,在 Java 中,此数字将表示为 int
。这为您提供了足够的空间来存储您的价值。如果你需要将它表示为一个字节,以便将它传输到某个地方或类似的东西,那么你可以将它转换为
int i = 255;
byte b = (byte) (i & 0xff);
但在这种情况下,它仍然是负数,因为 byte
在 Java 中签名。
此外,正如您可能已经发现的那样,十六进制文字的默认类型为 int
。所以 0xff
确实像您想要的那样具有 255 的值,但它是 int
,而不是 byte
。
如果我理解你的问题,在你执行任何计算之前你需要将你的字节与 255 进行 AND (&),所以你将处理从 0 到 255 的值而不是 -128 到 127。当您为溢出的字节分配了一个高于 127 的值,因此 128 作为 java 中的一个字节是 -128,但是在您将 AND (&) -128 与 255 进行比较之后,您将得到 +128.
// This prints 0 to 127, then -128 to -1
public static void main(String[] args) {
for (int i = 0; i <= 255; i++) {
System.out.println(((byte)i));
}
}
// Where this will print 0 to 255
public static void main(String[] args) {
for (int i = 0; i <= 255; i++) {
System.out.println(((byte)i) & 255);
}
}
对于一个赋值,我得到了一些字节,对它们的二进制值进行了一些计算,并且必须 return 在字节数组中计算 Stuff。
我现在的问题是,那个字节最多只能存储 127,但我的值最多可以达到 2^8-1 (11111111)。我已经尝试将它转换为十六进制,但它当然也不起作用。
那么,这可能吗?如果可以的话,那怎么可能,或者那样做是不可能的?
通常,在 Java 中,此数字将表示为 int
。这为您提供了足够的空间来存储您的价值。如果你需要将它表示为一个字节,以便将它传输到某个地方或类似的东西,那么你可以将它转换为
int i = 255;
byte b = (byte) (i & 0xff);
但在这种情况下,它仍然是负数,因为 byte
在 Java 中签名。
此外,正如您可能已经发现的那样,十六进制文字的默认类型为 int
。所以 0xff
确实像您想要的那样具有 255 的值,但它是 int
,而不是 byte
。
如果我理解你的问题,在你执行任何计算之前你需要将你的字节与 255 进行 AND (&),所以你将处理从 0 到 255 的值而不是 -128 到 127。当您为溢出的字节分配了一个高于 127 的值,因此 128 作为 java 中的一个字节是 -128,但是在您将 AND (&) -128 与 255 进行比较之后,您将得到 +128.
// This prints 0 to 127, then -128 to -1
public static void main(String[] args) {
for (int i = 0; i <= 255; i++) {
System.out.println(((byte)i));
}
}
// Where this will print 0 to 255
public static void main(String[] args) {
for (int i = 0; i <= 255; i++) {
System.out.println(((byte)i) & 255);
}
}