【问题标题】:Conversion of integer to byte in javajava中整数到字节的转换
【发布时间】:2015-10-18 22:06:35
【问题描述】:

参考 Herbert Schildt 的“Java The complete Reference”第 7 版的第 79 页。 作者说:“如果整数的值大于a的范围 字节,它将被减少模(整数除以的余数)字节的范围”。

java中字节的范围是-128到127。所以一个字节的最大值是128。如果给一个字节分配一个整数值如下所示:

int i = 257;
byte b;
b = (byte) i;

由于 257 跨越了 127 范围,因此 257 % 127 = 3 应存储在“b”中。 但是我得到的输出是 1 而不是 3。 我在理解这个概念上哪里出错了?

【问题讨论】:

  • 我认为你引用的作者弄错了。他所说的“字节范围”是什么意思?无论您将其理解为 127(如您所做的那样)还是 128 或 256,它都行不通。 (例如 129%128=1 而(字节)129 = -127)

标签: java


【解决方案1】:

257 = 00000000 000000000 00000001 00000001 以位为单位,一个字节仅由 8 位组成...

因此只存储低 8 位,输出为 1。

【讨论】:

  • 最后8位的值为1,没关系。是不是就不会做模运算了?
  • 不,不会有模运算...它不需要...只是铸造...
  • 模是除法。转换为较小的尺寸会导致截断,这与除法不同。没有等效的模运算可以对 2 的补码符号数产生相同的效果。书错了。
【解决方案2】:

只需考虑数字的二进制表示:

257 is represented in binary as 00000000 00000000 00000001 00000001

当您将这 32 位 int 转换为 8 位 byte 时,您只保留最低 8 位:

00000001

这是 1

【讨论】:

  • 并且值得一提的是,如果设置了第 7 位(字节中的最高位),那么结果将为负数。
猜你喜欢
  • 2021-11-06
  • 2011-01-28
  • 2012-07-10
  • 1970-01-01
  • 2010-12-28
  • 2015-05-12
  • 1970-01-01
  • 2016-01-10
相关资源
最近更新 更多