在这里表示使用二进制整数的问题是:在java语言
你给定的2个32位数字,N & M和2位的位置,我&Ĵ。写来设置于N等于M i和j之间的所有位的方法
例如(例如,M处我 定位和与j开始成为N的子串): 输入: INT N =百亿, M = 10101,i = 2,j = 6; 输出: INT N = 10001010100
我的解决办法:
step 1: compose one mask to clear sets from i to j in N
mask= (((((1<<(31-j))-1) << (j-i+1)) + 1) << i ) - 1
for the example, we have
mask= 11...10000011
step 2:
(N & mask) | (M<<i)
问: 什么是实现算法的便捷的数据类型?例如 我们在C中有int n = 0x100000,所以我们可以在n上应用按位运算符。 在Java中,我们有BitSet类,它有明确的设置方法,但不支持 左/右移运算符;如果我们使用int,它支持左/右移,但 不具有二进制表示(我不是说二进制字符串表示) 什么是最好的实现方式?
在Java代码中(后阅读所有评论):
int x = Integer.parseInt("10000000000",2);
int x = Integer.parseInt("10101",2);
int i = 2, j = 6;
public static int F(int x, int y, int i, int j){
int mask = (-1<<(j+1)) | (-1>>>(32-i));
return (mask & x) | (y<<i);
}
你是什么意思_“如果我们使用int ...但没有二进制表示法?”_您可以绝对地将'&'和'|'应用于Java中的ints。你是说在二进制文件中编写一个'int'文字吗? –
如果这是作业,请添加“家庭作业”标签。 –
是的,我说的是在二进制中定义一个int字面值,它类似于C语言中的这个语句:int N = 0x101010; – SecureFish