3

您好,我正在学习 Java 编程,我的书中刚刚有一项任​​务,将 int 变量转换为 byte 变量

byte b;
int i=257;

当我将 int 转换为 b

b=(byte) i;

输出为 1 ? 当字节变量的值从 -128 变为 127 时,它怎么会是一个在我的书中,他们说字节变量的有效范围为 256?

4

6 回答 6

6
257 == 00000000000000000000000100000001 (as integer which holds 32 bits)
  1 ==                         00000001 (byte holds only 8 bits)
于 2013-11-06T09:48:03.020 回答
2

因为它可以存储从 -128 到 127 的任何数字。一个字节总是用 Java 签名的。您可以通过将其与 0xFF 进行二进制与运算来获得其无符号值。

例子:

int i = 234;
byte b = (byte) i;
System.out.println(b); // -22
int i2 = b & 0xFF;
System.out.println(i2); // 234
于 2013-11-06T09:48:30.513 回答
2

这里的关键是看位。

int i = 257给我们这组位(去掉前导零):

b100000001

该值需要 9 位来保存(int有 32 位,所以有足够的空间)。当你这样做时b = (byte)i,它是一个截断的演员表。这意味着只有字节(八位)可以保存的内容被复制到它所以这给了我们低八位:

b00000001

...这是价值1

于 2013-11-06T09:52:56.850 回答
1

的范围256是因为它可以存储从一路到的任意数字 。这两个数字的差是。由于出现了的值,您尝试存储无法用位和符号位准确表示的值。-1281272561overflow71

于 2013-11-06T09:46:31.160 回答
0

这是因为字节范围是从-128到+127

请检查此链接为什么字节从-128 到 127

于 2013-11-06T09:45:31.953 回答
0

-128 0 127, 所以范围是 256。

-2^7 to 2^7-1
于 2013-11-06T09:46:25.927 回答