What's the best way to write a function with the following prototype:

unsigned power_of_two(const unsigned &max);

where the function should return the largest power of 2 that is < max.

You can of course do it the old-fashioned way:

Or you can do this:Code:`unsigned power_of_two(const unsigned &max) {`

unsigned result = 1;

while (result < max) {

result *= 2;

}

result /= 2;

return result;

}

Or, in the same spirit as the second, and presumably slightly slower but more straightforward:Code:`unsigned power_of_two(const unsigned &max) {`

unsigned result = max;

--result;

result |= result >> 1;

result |= result >> 2;

result |= result >> 4;

result |= result >> 8;

result |= result >> 16; // now all bits are set up to the most significant bit in _size

++result; // result is now the nearest power of 2 greater than or equal to _size

result = result >> 1; // result < _size

return result;

Code:`unsigned power_of_two(const unsigned &max) {`

unsigned result = 1;

while (result < max) {

result = result << 1;

}

result = result >> 1;

return result;

}