3

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

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

我知道这就是如何让前面说一个 int 的 10 位:(我认为)int x = num >> 22;

4

2 回答 2

3

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

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

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

会给你结果。

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

掩码的值为((1 << (j-i)) - 1) << 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 位)。

于 2013-04-14T17:24:10.207 回答
1

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

int val = bits & 0x002;

获取第 16 位的值

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

获取第 n 位的值

int val = bits & (1<<n);
于 2013-04-14T17:14:38.270 回答