143 if (data.empty () || (data.size () == 1 && data[0] == 0))
148 int msbBlock =
static_cast<int> (data.size ()) - 1;
149 uint32_t msbValue = data[msbBlock];
152 while (msbBit > 0 && ((msbValue >> msbBit) & 1) == 0)
157 int startBit = msbBlock * 32 + msbBit;
162 for (
int i = 0; i < 64; ++i)
164 int bitPos = startBit - i;
167 int block = bitPos / 32;
168 if (block <
static_cast<int> (data.size ()))
170 int bit = bitPos % 32;
171 uint64_t bitValue = (data[block] >> bit) & 1;
172 hi |= (bitValue << (63 - i));
177 for (
int i = 0; i < 64; ++i)
179 int bitPos = startBit - 64 - i;
182 int block = bitPos / 32;
183 if (block <
static_cast<int> (data.size ()))
185 int bit = bitPos % 32;
186 uint64_t bitValue = (data[block] >> bit) & 1;
187 lo |= (bitValue << (63 - i));