public static int GetBitCount(this BigInt self) {
if (self.IsZero) {
return 1;
}
byte[] bytes = BigInt.Abs(self).ToByteArray();
int index = bytes.Length;
while (bytes[--index] == 0) ;
int count = index * 8;
for (int hiByte = bytes[index]; hiByte > 0; hiByte >>= 1) {
count++;
}
return count;
}