gpt4 book ai didi

java - Java 中的位移位

转载 作者:行者123 更新时间:2023-12-01 17:03:49 27 4
gpt4 key购买 nike

为什么会这样:

return 1 | (1 << 32) // returns 0x00000001

但是:

return 6 | (1 << 32) // returns 0x00000007

我期待后者返回 0x00000006。什么类型的位掩码可以与表达式进行“或”运算以生成 6 | 0x00000006 (1 << 32)?

最佳答案

Java 在移位时仅使用位移参数的最后 5 位 int s。所以1 << 32相当于 1 << 0 ,或者只是1 .

1位已在 1 中设置,所以1 | 11 。为了清楚起见,仅显示最后 8 位:

   0000 0001 (1)
or 0000 0001 (1)
------------
0000 0001 (1)

但是1 6 中未设置位,所以6 | 1设置该位,数字变为 7 。它正在按预期工作。

   0000 0110 (6)
or 0000 0001 (1)
------------
0000 0111 (7)

添加

针对问题的补充:

6仅设置了 2 位 ( 0000 0110 ),因此您可以与 6 进行按位或运算的任何数字并且仍然有 6必须清除 6 中清除的所有位。只剩下 4 个选择,即 6 的设置位的组合。正在设置或清除:

  • 0 (0000 0000)
  • 2 (0000 0010)
  • 4 (0000 0100)
  • 6 (0000 0110)

任何其他int将设置至少一个其他位,使输出不同于 6 .

关于java - Java 中的位移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26431832/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com