Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何使用位掩码提取位的某些部分?_Java_Bit_Bitmask - Fatal编程技术网

Java-如何使用位掩码提取位的某些部分?

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

这是我第一次研究逐位操作和位掩码。我已经看到了一些使用C和C++的例子,但是我正在寻找使用java的说明。p> 我有下面的32位字符串

0000 000010100110 0011 1000 0010 0000

但我想用粗体(00101)提取第21位到第25位,并忽略其他所有内容。最后,我希望我的输出结果是整数5(二进制的0101)


使用位掩码,我可以使用什么方法只获得该位部分作为输出结果

如果确实有一个
字符串
,则取两个子字符串(
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位)。