我有一个很长的号码。现在,我想做的是以下内容:
long l = "001000......10001100000" (bits representation)
我需要从左侧删除它的第 3位和第 4位(即10)并将剩余的 62 位转换为长
long newl = "0000......10001100000" (bits representation)
任何人都可以帮助我在 Java 中有效地做到这一点吗?
我有一个很长的号码。现在,我想做的是以下内容:
long l = "001000......10001100000" (bits representation)
我需要从左侧删除它的第 3位和第 4位(即10)并将剩余的 62 位转换为长
long newl = "0000......10001100000" (bits representation)
任何人都可以帮助我在 Java 中有效地做到这一点吗?
您通常通过使用掩码来设置位;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;
如果您将位列表作为字符串,则只需从该字符串中删除第 3 位和第 4 位,然后使用Long.parseLong(string, 2)
.