unsignedRightShift method

int unsignedRightShift(
  1. int a,
  2. int b
)

Implementation

int unsignedRightShift(int a, int b) {
  var shift = b;
  if (shift >= 32 || shift < -32) {
    final int m = shift ~/ 32;
    shift = shift - (m * 32);
  }

  if (shift < 0) {
    shift = 32 + shift;
  }

  if (shift == 0) {
    return ((a >> 1) & 0x7fffffff) * 2 + ((a >> shift) & 1);
  }

  var val = a;
  if (val < 0) {
    val = (val >> 1);
    val &= 2147483647;
    val |= 0x40000000;
    val = (val >> (shift - 1));
  } else {
    val = (val >> shift);
  }
  return val;
}