【问题标题】:What is happening in this line of code? [duplicate]这行代码发生了什么? [复制]
【发布时间】:2015-03-29 18:32:53
【问题描述】:

我在玩一些尝试学习 Java 的随机代码时遇到了这个问题

y = (0x000000FF & ((int)x));

x = -102, y = 154

这一行到底发生了什么?

【问题讨论】:

  • 你知道负整数在二进制补码中是如何表示的吗?
  • @fge 如果我没记错的话,它是如何表示负数的,例如 -2 应该是 (2^8)-2。

标签: java


【解决方案1】:

该操作将x 的最低8 位转换为y,从而屏蔽了高24 位。

-102 十六进制表示为ffffff9a,这将使y 成为9a

【讨论】:

    【解决方案2】:
    public static void main(final String... args)
    {
        System.out.println(Integer.toBinaryString(-102));
        System.out.println(Integer.toBinaryString(154));
    }
    

    打印:

    11111111111111111111111110011010
    10011010
    

    现在改成这样写:

    11111111111111111111111110011010
    00000000000000000000000010011010
    

    最后,0xff 是:

    00000000000000000000000011111111
    

    你明白你的结果......

    【讨论】:

      猜你喜欢
      • 2016-06-09
      • 2013-09-13
      • 2017-08-02
      • 2018-11-12
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      相关资源
      最近更新 更多