我有和int和一个字节,我需要字节值与int相同的值,我发现的所有答案最终都是这样的:
int i = 234;
byte b = (byte) i;
System.out.println(b); // -22
int i2 = b & 0xFF;
System.out.println(i2); // 234
现在如果我的int等于234,我打印出来时需要我的字节值234,而不是-22,我理解为什么它打印出来-22但不是我需要的。
如果有人知道该怎么做,请帮助我。
答案 0 :(得分:5)
你做不到。 byte
只能存储-128
和127
之间的数字。转换不可表示的整数时,必然会发生信息丢失。
详细说明,在将int
转换为byte
时,只考虑最低的8位。 234
可以在这8位中表示,但结果是负数(-22
),因为MSB为1.在您的代码中,当您执行时
int i2 = b & 0xFF;
它将数字渲染回32位整数,除了最低8位设置为零之外的所有位。因此,结果是相同的数字234
。
答案 1 :(得分:1)
我打印输出时如何使字节存储与int相同的值的问题的答案是byte b = (byte) intVariable;
。我理解234不会工作,因为它超出了限制,但我没有说我使用的是这个数字,这是我给出的一个例子,虽然我现在理解它没有用,所以很抱歉并感谢所有尝试过的人。