3

//好吧有道理

Byte b = (byte)207;
System.out.println(b); //value = 207

//ok 没有意义

Integer x = Integer.parseInt("11001111", 2); //207
Byte sens = (byte)x.intValue(); //207
System.out.println(sens); //Value = -49
System.out.println(sens.intValue()); //Value = -49

这里发生了什么?

那么如何声明/表示一个值高于 127 的 8 位字节

4

4 回答 4

9

Java 中的字节是有符号的,所以它们从 -128 到 127。像这样转换一个 int 将在 1 处获取高位(表示二进制补码符号中的负数)并将其转换为负数 -49。

从那里开始,当你用 将它转换回整数时sens.intValue(),它会获取新的负值并返回它,所以你仍然得到 -49。

int不幸的是,您需要在数据类型中存储大于 128 的字节。

于 2013-01-07T22:07:45.860 回答
1

由于 Java 的 Byte 已签名,因此您不能以字节表示大于 127 的值。

在您的示例中:

Byte b = (byte)207;
System.out.println(b); //value = 207

有一个错误。println 的输出为 -49。

Byte b = (byte)207;
System.out.println(b); //value = -49

这意味着两种情况是相同的。

于 2013-01-07T23:29:31.207 回答
0

正数不能超过 127,负数可以超过 128,是因为一个字节的 8 位数字中的第一个 1 表示它是负数还是正数:

1 = 负

0 = 正

并且由于您可以将“1111 1111”用于负数,因此可以得到-127。

于 2016-02-16T20:05:18.310 回答
0

255 + 负 byteValue + 1 通过计数器操作返回您的数字。仍然建议存储在 int 中。

如果你喜欢它,最好在它周围放一个数字环。

于 2020-11-06T17:40:24.357 回答