使用位运算快速求解取余运算

This commit is contained in:
yucheng 2022-01-30 10:17:00 +08:00
parent b4e3fe485a
commit c7a33d9015
2 changed files with 8 additions and 8 deletions

View File

@ -32,21 +32,21 @@ public class IntMap implements BitMap, Serializable {
@Override @Override
public void add(long i) { public void add(long i) {
int r = (int) (i / BitMap.MACHINE32); int r = (int) (i / BitMap.MACHINE32);
int c = (int) (i % BitMap.MACHINE32); int c = (int) (i & (BitMap.MACHINE32 - 1));
ints[r] = ints[r] | (1 << c); ints[r] = ints[r] | (1 << c);
} }
@Override @Override
public boolean contains(long i) { public boolean contains(long i) {
int r = (int) (i / BitMap.MACHINE32); int r = (int) (i / BitMap.MACHINE32);
int c = (int) (i % BitMap.MACHINE32); int c = (int) (i & (BitMap.MACHINE32 - 1));
return ((ints[r] >>> c) & 1) == 1; return ((ints[r] >>> c) & 1) == 1;
} }
@Override @Override
public void remove(long i) { public void remove(long i) {
int r = (int) (i / BitMap.MACHINE32); int r = (int) (i / BitMap.MACHINE32);
int c = (int) (i % BitMap.MACHINE32); int c = (int) (i & (BitMap.MACHINE32 - 1));
ints[r] &= ~(1 << c); ints[r] &= ~(1 << c);
} }

View File

@ -32,21 +32,21 @@ public class LongMap implements BitMap, Serializable {
@Override @Override
public void add(long i) { public void add(long i) {
int r = (int) (i / BitMap.MACHINE64); int r = (int) (i / BitMap.MACHINE64);
long c = i % BitMap.MACHINE64; long c = i & (BitMap.MACHINE64 - 1);
longs[r] = longs[r] | (1L << c); longs[r] = longs[r] | (1L << c);
} }
@Override @Override
public boolean contains(long i) { public boolean contains(long i) {
int r = (int) (i / BitMap.MACHINE64); int r = (int) (i / BitMap.MACHINE64);
long c = i % BitMap.MACHINE64; long c = i & (BitMap.MACHINE64 - 1);
return ((longs[r] >>> c) & 1) == 1; return ((longs[r] >>> c) & 1) == 1;
} }
@Override @Override
public void remove(long i) { public void remove(long i) {
int r = (int) (i / BitMap.MACHINE64); int r = (int) (i / BitMap.MACHINE64);
long c = i % BitMap.MACHINE64; long c = i & (BitMap.MACHINE64 - 1);
longs[r] &= ~(1L << c); longs[r] &= ~(1L << c);
} }