Aussie AI
Example: Highest Integer Power-of-Two
-
Book Excerpt from "Generative AI in C++"
-
by David Spuler, Ph.D.
Example: Highest Integer Power-of-Two
Another simple trick related to the log2
calculation
is to truncate a number to its largest power-of-2.
This is equivalent to the value of its leftmost bit in binary representation.
For example, 8
(binary 1000
) stays as 8
, because it's 2^3
, but 7
(binary 111
) reduces down to 4
(binary 100
), which is 2^2
.
As with the truncated integer log2
calculation, this method focuses on computing the leftmost 1 bit,
which is known as the Most-Significant Bit (MSB).
Whereas the log2
calculation found the index position of that MSB, this power-of-two calculation requires the value of the MSB.
In other words, we need to find the bit that is the MSB, and then keep only that bit.
A simple way to do this is to compute the log2
of the integer efficiently, and then left-shift a 1
by that many places (using unsigned
type).
The basic idea is:
int bitoffset = log2_integer_fast(i); int highestpowerof2 = 1u << bitoffset;
Note that this doesn't handle cases like zero, so it still needs a bit of extra code polishing work.
• Next: • Up: Table of Contents |
The new AI programming book by Aussie AI co-founders:
Get your copy from Amazon: Generative AI in C++ |