[bit-utils] add DetermineMinBitSizeFor helper method (#13287)

This commit adds `DetermineMinBitSizeFor(uint32_t)` to calculate and
return the minimum number of bits required to represent a given
32-bit unsigned integer value.

It also adds unit tests for this in `test_bit_utils.cpp`.
This commit is contained in:
Abtin Keshavarzian
2026-07-03 13:13:42 -07:00
committed by GitHub
parent a56a79bcb7
commit 1d4900609d
3 changed files with 66 additions and 0 deletions
+42
View File
@@ -130,6 +130,47 @@ void TestCountMatchingBitsExamples(void)
printf("TestCountMatchingBitsExamples() passed\n");
}
void TestDetermineMinBitSize(void)
{
VerifyOrQuit(DetermineMinBitSizeFor(0) == 1);
VerifyOrQuit(DetermineMinBitSizeFor(1) == 1);
VerifyOrQuit(DetermineMinBitSizeFor(2) == 2);
VerifyOrQuit(DetermineMinBitSizeFor(3) == 2);
VerifyOrQuit(DetermineMinBitSizeFor(4) == 3);
VerifyOrQuit(DetermineMinBitSizeFor(6) == 3);
VerifyOrQuit(DetermineMinBitSizeFor(7) == 3);
VerifyOrQuit(DetermineMinBitSizeFor(8) == 4);
VerifyOrQuit(DetermineMinBitSizeFor(11) == 4);
VerifyOrQuit(DetermineMinBitSizeFor(15) == 4);
VerifyOrQuit(DetermineMinBitSizeFor(16) == 5);
VerifyOrQuit(DetermineMinBitSizeFor(30) == 5);
VerifyOrQuit(DetermineMinBitSizeFor(32) == 6);
VerifyOrQuit(DetermineMinBitSizeFor(127) == 7);
VerifyOrQuit(DetermineMinBitSizeFor(128) == 8);
VerifyOrQuit(DetermineMinBitSizeFor(255) == 8);
VerifyOrQuit(DetermineMinBitSizeFor(256) == 9);
VerifyOrQuit(DetermineMinBitSizeFor(500) == 9);
VerifyOrQuit(DetermineMinBitSizeFor(1000) == 10);
VerifyOrQuit(DetermineMinBitSizeFor(1023) == 10);
VerifyOrQuit(DetermineMinBitSizeFor(1024) == 11);
VerifyOrQuit(DetermineMinBitSizeFor(2000) == 11);
VerifyOrQuit(DetermineMinBitSizeFor(0xffff) == 16);
VerifyOrQuit(DetermineMinBitSizeFor(0x10000) == 17);
VerifyOrQuit(DetermineMinBitSizeFor(0x7fffffff) == 31);
VerifyOrQuit(DetermineMinBitSizeFor(0x80000000) == 32);
VerifyOrQuit(DetermineMinBitSizeFor(0xffffffff) == 32);
printf("TestDetermineMinBitSize() passed\n");
}
} // namespace ot
int main(void)
@@ -137,6 +178,7 @@ int main(void)
ot::TestCountBitsInMask();
ot::TestCountMatchingBitsAllCombinations();
ot::TestCountMatchingBitsExamples();
ot::TestDetermineMinBitSize();
printf("All tests passed\n");
return 0;