【问题标题】:How to create 32 bit mask in Java如何在 Java 中创建 32 位掩码
【发布时间】:2015-10-02 18:36:37
【问题描述】:

到目前为止,我有这段代码可以创建 16 位掩码。但是我不知道如何使用这种方法创建一个 32 位掩码。有任何想法吗?

编辑:我想创建 32 个 32 位的掩码,每个掩码的相应位为 1,其余位为零。例如:掩码 1 的最左边位为 1,其余位为零,掩码 2 的最左边第 2 位为 1,其余位为零。我不知道如何更简洁地解释,但我希望你们能明白……

mask = new int[16];
mask[0] = 0x8000;
mask[1] = 0x4000;
mask[2] = 0x2000;
mask[3] = 0x1000;

mask[4] = 0x0800;
mask[5] = 0x0400;
mask[6] = 0x0200;
mask[7] = 0x0100;

mask[8] = 0x0080;
mask[9] = 0x0040;
mask[10] = 0x0020;
mask[11] = 0x0010;

mask[12] = 0x0008;
mask[13] = 0x0004;
mask[14] = 0x0002;
mask[15] = 0x0001

【问题讨论】:

  • 你为什么不用一个简单的循环来初始化它呢?为什么不能将此方法扩展到两倍的位数?为什么需要这样的 32 位位掩码——这里更大的目标是什么?
  • 从技术上讲,你已经这样做了......
  • 抱歉问题不清楚,我编辑了。
  • @uohzxela:它仍然没有解释你在简单地将当前方法扩展到两倍位数时遇到了什么问题。

标签: java bit-manipulation bit


【解决方案1】:

以下是在 Java 中创建 32 位掩码的方法。

int mask = 0x00010000;  // for example.

如果你想创建一个设置了位 N 的 32 位掩码,那么

int mask = 1 << N;  // Assumes the rightmost bit is numbered zero ...

如果你想创建一个掩码数组,那么只需以明显的方式循环执行上述操作。

int[] masks = new int[32];
for (int n = 0; n < 32; n++) {
    masks[n] = 1 << n;
}

实际上,您所谓的“16 位掩码”也是 32 位掩码,因为 int 在 Java 中是 32 位类型。

和@Matt Ball 一样,我对您真正想要做的事情感到困惑,而您是否打算这样做是实现它的明智方式。当您可以用更少的代码动态创建掩码时,为什么还需要一个掩码数组?

【讨论】:

  • 抱歉问题不清楚。我编辑了它。希望现在有意义。
  • "假定最左边的位编号为零..." -- 它实际上假定最右边的位编号为零。 ;)
  • 非常感谢。你的回答让我豁然开朗,把我引向了正确的方向。
【解决方案2】:

我认为你做得很好。

AMOUNT_OF_BITS = 32;
mask = new long[AMOUNT_OF_BITS];
for (long i = 0; i < AMOUNT_OF_BITS; i++)
{
    mask[i] = Math.pow(2,i);
}

我认为这应该可行。

【讨论】:

  • 这不起作用 Math.pow(x,y) 返回双倍。你将不得不投到很长。 mask[i] = (long) Math.pow(2,i);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 2020-02-22
  • 2020-07-31
相关资源
最近更新 更多