Java-如何使用位掩码提取位的某些部分?
这是我第一次研究逐位操作和位掩码。我已经看到了一些使用C和C++的例子,但是我正在寻找使用java的说明。p> 我有下面的32位字符串 0000 000010100110 0011 1000 0010 0000 但我想用粗体(00101)提取第21位到第25位,并忽略其他所有内容。最后,我希望我的输出结果是整数5(二进制的0101)Java-如何使用位掩码提取位的某些部分?,java,bit,bitmask,Java,Bit,Bitmask,这是我第一次研究逐位操作和位掩码。我已经看到了一些使用C和C++的例子,但是我正在寻找使用java的说明。p> 我有下面的32位字符串 0000 000010100110 0011 1000 0010 0000 但我想用粗体(00101)提取第21位到第25位,并忽略其他所有内容。最后,我希望我的输出结果是整数5(二进制的0101) 使用位掩码,我可以使用什么方法只获得该位部分作为输出结果 如果确实有一个字符串,则取两个子字符串(00和101),将它们连接起来,并使用以两个为基数的Integer
使用位掩码,我可以使用什么方法只获得该位部分作为输出结果 如果确实有一个
字符串
,则取两个子字符串(00
和101
),将它们连接起来,并使用以两个为基数的Integer.parseInt
:
int bits=Integer.parseInt(str.substring(7,9)+str.substring(10,13,2);
如果您有一个
int
,请使用逻辑右移,然后使用带有位掩码的&
(0b
表示二进制表示法)
int位=(n>>>21)&0b11111;
将数字右移21位<代码>&与0x1F
一起使用。Java有一个逐位移位运算符>>,因此只需将rbits下移到最低位(即将其右移21位)。