我如何获得 Java 中 int 的特定子集,例如位 5-10?
寻找一种可以传递特定位位置的方法。我不确定如何创建一个在给定输入的情况下会发生变化的掩码,或者即使这是应该如何去做的。
我知道这就是如何让前面说一个 int 的 10 位:(我认为)int x = num >> 22;
我如何获得 Java 中 int 的特定子集,例如位 5-10?
寻找一种可以传递特定位位置的方法。我不确定如何创建一个在给定输入的情况下会发生变化的掩码,或者即使这是应该如何去做的。
我知道这就是如何让前面说一个 int 的 10 位:(我认为)int x = num >> 22;
假设您有一个数字n
,并且想要从i
到j
(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
)0000000000011111
) - 你看到最低位反转了吗?i
次(值:31*32=992 = 0000001111100000
)因此,您已经获得了位 5 - 10 的位掩码(更准确地说,从 5 到 9,因为不包括第 10 位)。
获取位 1 的值(位索引从 0 到 31)
int val = bits & 0x002;
获取第 16 位的值
int val = bits & (1<<16);
获取第 n 位的值
int val = bits & (1<<n);