Util.java 950 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package util;
  2. import java.util.Arrays;
  3. import java.util.Random;
  4. public class Util {
  5. public static long nextLong(Random r, long range) {
  6. long bits, val;
  7. do {
  8. bits = (r.nextLong() << 1) >>> 1;
  9. val = bits % range;
  10. } while (bits - val + (range - 1) < 0L);
  11. return val;
  12. }
  13. public static long getSubBits(long l, long end, long start) {
  14. if (start < 0)
  15. throw new IllegalArgumentException(start + " < 0");
  16. if (start > end)
  17. throw new IllegalArgumentException(start + " > " + end);
  18. long mask = (1L << (end - start)) - 1L;
  19. return (l >>> start) & mask;
  20. }
  21. public static long setSubBits(long target, long input, long end, long start) {
  22. long len = end - start;
  23. input = getSubBits(input, len, 0);
  24. long trash = getSubBits(target, end, start);
  25. return ((trash ^ input) << start) ^ target;
  26. }
  27. public static byte[] rmSignBit(byte[] arr) {
  28. if (arr[0] == 0)
  29. return Arrays.copyOfRange(arr, 1, arr.length);
  30. return arr;
  31. }
  32. }