trailingZeroBits property

int get trailingZeroBits

Implementation

int get trailingZeroBits {
  if (this == BigInt.zero) return 0;

  int ret = 0;

  int numberInt;

  {
    var number = this;
    numberInt = (number & BigInt.from(0xffffffff)).toInt();
    while (numberInt == 0) {
      number >>= 32;
      ret += 32;
    }
  }

  if (numberInt.isOdd) return ret;

  if (numberInt & 0xffff == 0) {
    numberInt >>= 16;
    ret += 16;
  }

  if (numberInt.isOdd) return ret;

  if ((numberInt & 0xff) == 0) {
    numberInt >>= 8;
    ret += 8;
  }

  if (numberInt & 0xf == 0) {
    numberInt >>= 4;
    ret += 4;
  }

  if (numberInt & 0x3 == 0) {
    numberInt >>= 2;
    ret += 2;
  }

  if (numberInt & 1 == 0) ++ret;

  return ret;
}