我知道在获得数字中最不重要的位时,可以执行scale()
。这将清除除最少设置之外的所有其他位。我现在想知道如何才能轻松获得最重要的一点。我可以提出一些变化的代码,但在复杂性方面可能并不理想。
答案 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;
虽然这看起来很复杂,但在运行时它实际上只是一个班次操作。这仅适用于int
和unsigned
类型。