I want to extract the n most significant bits from an integer in C++ and convert those n bits to an integer.
For example
int a=1200;
// its binary representation within 32 bit word-size is
// 00000000000000000000010010110000
Now I want to extract the 4 most significant digits from that representation, i.e. 1111
00000000000000000000010010110000
^^^^
and convert them again to an integer (1001 in decimal = 9).
How is possible with a simple c++ function without loops?
Some processors have an instruction to count the leading binary zeros of an integer, and some compilers have instrinsics to allow you to use that instruction. For example, using GCC:
For simplicity, I left out checks that the requested number of bits are available. For Microsoft’s compiler, the intrinsic is called
__lzcnt.If your compiler doesn’t provide that intrinsic, and you processor doesn’t have a suitable instruction, then one way to count the zeros quickly is with a binary search: