【问题标题】:Obtain a specific subset of bits of an int in Java在 Java 中获取 int 的特定位子集
【发布时间】:2013-04-14 17:10:59
【问题描述】:

我如何获得 Java 中 int 的特定子集,例如位 5-10?

寻找一种可以传递特定位位置的方法。我不确定如何创建一个在给定输入的情况下会发生变化的掩码,或者即使应该这样做。

我知道这是如何让前面说 10 位 int:(我认为) int x = 数字 >> 22;

【问题讨论】:

标签: java bit-manipulation


【解决方案1】:

假设您有一个数字 n,并且想要从 ij 的位(i=5,j=10)。

注意,i=0 会给你最后一点

 int value = n & (((1 << (j-i)) - 1) << i );

会给你结果。

左边很明显:你有一个值,你会在它上面放一个位掩码。

掩码的值为((1 &lt;&lt; (j-i)) - 1) &lt;&lt; i。它说:

  • 获取1 位(值:0000000000000001
  • 左移j-i次(值:2^(10-5) = 2^5 = 32 = 0000000000100000
  • 减去 1(值:31 = 0000000000011111) - 您看到最低位反转了吗?
  • 左移i次(值:31*32=992 = 0000001111100000

因此,您已经获得了位 5 到 10 的位掩码(更准确地说,从 5 到 9,因为第 10 位不包括在内)。

【讨论】:

    【解决方案2】:

    获取第 1 位的值(位索引从 0 到 31)

    int val = bits & 0x002;
    

    获取第 16 位的值

    int val = bits & (1<<16);
    

    获取位n的值

    int val = bits & (1<<n);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 2012-06-24
      • 2021-01-30
      • 2023-02-25
      • 2020-05-26
      相关资源
      最近更新 更多