1

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

long l = "001000......10001100000" (bits representation)

我需要从左侧删除它的第 3和第 410)并将剩余的 62 位转换为长

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

任何人都可以帮助我在 Java 中有效地做到这一点吗?

4

2 回答 2

2

您通常通过使用掩码来设置位;OR您可以通过使用掩码的补码来清除位:AND

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

如果您要删除这些位(并将值有效地缩短为 62 位),那么您可以试试这个:

long topBits = ((3L << 62) & l) >> 2; // Top 2 bits, shifted right
long bottomBits = (~(15L << 60) & l); // Bottom 60 bits
long newl = topBits | bottomBits;
于 2012-04-28T21:18:06.483 回答
0

如果您将位列表作为字符串,则只需从该字符串中删除第 3 位和第 4 位,然后使用Long.parseLong(string, 2).

于 2012-04-28T21:17:58.583 回答