【问题标题】:Integer Wrapper Class [duplicate]整数包装类 [重复]
【发布时间】:2021-04-24 07:27:14
【问题描述】:

整数包装类

Integer obj = new Integer("1000");

System.out.println(obj.byteValue( )); //-24

我无法理解这个输出是如何形成的。我想了解如何将整数中的“1000”转换为字节中的“-24”。我想知道这背后的逻辑。

【问题讨论】:

  • 提示:(1)字节数的范围是多少(可以容纳多少位)? (2) 看一下-24和1000的二进制表示。
  • @GauthamM 谢谢先生,我现在可以理解了

标签: java integer


【解决方案1】:

docs 说:

在缩小原语转换后将此 Integer 的值作为字节返回。

如果您不知道“缩小原始转换”是什么,这并不是特别有用。好吧,您可以查看 Java 语言规范 (section 5.1.3) 以了解其定义:

有符号整数到整数类型 T 的窄化转换只会丢弃除 n 个最低位之外的所有位,其中 n 是用于表示类型 T 的位数。

Integer1000 用 32 位表示:

00000000 00000000 00000011 11101000

byte 是 8 位,所以我们丢弃除了 8 个最低位之外的所有位,我们得到:

11101000

在 8 位 two's complement 二进制中是 -24。 -24 = -128 + 64 + 32 + 8

【讨论】:

    【解决方案2】:

    将整数转换为字节将给出整数的最后 8 位。

    1000 十进制 -> 1111101000 二进制

    将其转换为字节值会得到 11101000,即 -24。

    【讨论】:

      猜你喜欢
      • 2014-07-17
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 2022-01-21
      • 2015-09-05
      • 1970-01-01
      相关资源
      最近更新 更多