将整数变量转换为字节变量

3

你好,我正在学习Java编程,我的教材上有一个任务,需要将int变量转换为byte变量。

byte b;
int i=257;

当我将整数转换为二进制时

b=(byte) i;

输出是1吗? 当byte变量的值从-128到127时,它怎么可能是1呢? 我的书上说byte变量的有效范围是256?


3
你正在读哪本书?Java 中的 byte 类型始终是有符号的。 - Joachim Sauer
6个回答

6
257 == 00000000000000000000000100000001 (as integer which holds 32 bits)
  1 ==                         00000001 (byte holds only 8 bits)

1
如果你在二进制数字前加上0b,你甚至可以在Java中测试它。例如:System.out.println(1 == 0b00000001); - afsantos

2
关键在于查看位(bits)。 int i = 257 给了我们一个二进制数据(去掉前导零):
b100000001
这个值需要用9位来存储(int有32位,所以有大量的空间)。当你执行 b = (byte)i时,它是一种“截断转换”(truncating cast)方式。这意味着只有能够被字节(8位)容纳的值被复制到它里面。因此,我们得到了低8位:
b00000001
... 这就是值 1

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

1
范围为256是因为它可以存储从-128到127的任何数字。这两个数字之间的差异为256。值1的出现得益于溢出,其中您尝试存储无法使用7位和1个符号位准确表示的值。请保留HTML标签。

0

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

请查看此链接,了解为什么字节范围是从{{link1:-128到127}}。


0

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

-2^7 to 2^7-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接