如何获得数字中最重要位的位置?

时间:2016-04-20 20:34:22

标签: bit

我知道在获得数字中最不重要的位时,可以执行scale()。这将清除除最少设置之外的所有其他位。我现在想知道如何才能轻松获得最重要的一点。我可以提出一些变化的代码,但在复杂性方面可能并不理想。

1 个答案:

答案 0 :(得分:0)

#include <climits>

// have the compiler determine how many bits we need to right shift so only
// the biggest will be left
constexpr unsigned shiftby = 1<<(CHAR_BIT*sizeof(unsigned)-1);
// then at runtime: shift it.
unsigned result = static_cast<unsigned>(x)>>shiftby;

虽然这看起来很复杂,但在运行时它实际上只是一个班次操作。这仅适用于intunsigned类型。