长时间上的Java位操作-删除一些位

长时间上的Java位操作-删除一些位,java,Java,我有一个很长的号码。现在,我想做的是: long l = "001000......10001100000" (bits representation) 我需要从左边删除它的第3位和第4位(即10位),并将剩余的62位转换为长 long newl = "0000......10001100000" (bits representation) 有人能帮我在Java中高效地完成这项工作吗?如果您将位列表作为字符串,那么只需从该字符串中删除第3位和第4位,然后使用Long.parseLong(st

我有一个很长的号码。现在,我想做的是:

long l = "001000......10001100000" (bits representation)
我需要从左边删除它的第3位和第4位(即10位),并将剩余的62位转换为长

long newl = "0000......10001100000" (bits representation)

有人能帮我在Java中高效地完成这项工作吗?

如果您将位列表作为字符串,那么只需从该字符串中删除第3位和第4位,然后使用
Long.parseLong(string,2)
您通常通过
或用掩码设置位;通过
使用掩码的补码清除位:

long mask = 3L << 60; // 001100...
long newl = l & ~mask;     // Clear the bits in the mask.

long mask=3L因此
long newl=long.parseLong(string.substring(0,2)+string.substring(4,2)-,
使两位为0,但不删除它们。@JoopEggen我不知道删除实际上意味着删除;我认为它的意思很清楚。:-)更新为实际删除位。
long topBits = ((3L << 62) & l) >> 2; // Top 2 bits, shifted right
long bottomBits = (~(15L << 60) & l); // Bottom 60 bits
long newl = topBits | bottomBits;