你好,我正在学习Java编程,我的教材上有一个任务,需要将int变量转换为byte变量。
byte b;
int i=257;
当我将整数转换为二进制时
b=(byte) i;
输出是1吗? 当byte变量的值从-128到127时,它怎么可能是1呢? 我的书上说byte变量的有效范围是256?
你好,我正在学习Java编程,我的教材上有一个任务,需要将int变量转换为byte变量。
byte b;
int i=257;
当我将整数转换为二进制时
b=(byte) i;
输出是1吗? 当byte变量的值从-128到127时,它怎么可能是1呢? 我的书上说byte变量的有效范围是256?
257 == 00000000000000000000000100000001 (as integer which holds 32 bits)
1 == 00000001 (byte holds only 8 bits)
0b
,你甚至可以在Java中测试它。例如:System.out.println(1 == 0b00000001);
- afsantosint i = 257
给了我们一个二进制数据(去掉前导零):
b100000001这个值需要用9位来存储(
int
有32位,所以有大量的空间)。当你执行 b = (byte)i
时,它是一种“截断转换”(truncating cast)方式。这意味着只有能够被字节(8位)容纳的值被复制到它里面。因此,我们得到了低8位:
b00000001... 这就是值
1
。因为它可以存储从-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
这是因为字节范围是从-128到+127。
请查看此链接,了解为什么字节范围是从{{link1:-128到127}}。
-128 0 127
,所以范围是256。
-2^7 to 2^7-1
byte
类型始终是有符号的。 - Joachim Sauer