130 if (data.empty () || (data.size () == 1 && data[0] == 0))
135 int msbBlock =
static_cast <int> (data.size ()) - 1;
136 uint32_t msbValue = data[msbBlock];
139 while (msbBit > 0 && ((msbValue >> msbBit) & 1) == 0)
144 int startBit = msbBlock * 32 + msbBit;
149 for (
int i = 0; i < 64; ++i)
151 int bitPos = startBit - i;
154 int block = bitPos / 32;
155 if (block <
static_cast <int> (data.size ()))
157 int bit = bitPos % 32;
158 uint64_t bitValue = (data[block] >> bit) & 1;
159 hi |= (bitValue << (63 - i));
164 for (
int i = 0; i < 64; ++i)
166 int bitPos = startBit - 64 - i;
169 int block = bitPos / 32;
170 if (block <
static_cast <int> (data.size ()))
172 int bit = bitPos % 32;
173 uint64_t bitValue = (data[block] >> bit) & 1;
174 lo |= (bitValue << (63 - i));