Bit twiddling:用c ++中的模板找到下一个2的幂

And*_*asT 1 c++ templates bit-manipulation

这是我的一般问题的后续行动: bit-twiddling-find-next-power-of-two

我现在创建了以下模板函数:

template <typename T>
T nextPowerOfTwo(T n)
{
    std::size_t k=1;
    n--;
    do {
        n |= n >> k ;
        k <<=1;
    }
    while (k < sizeof(T)*8)
    return ++n;
}
Run Code Online (Sandbox Code Playgroud)

2个问题:

  1. 指定T作为unsignednextPowerOfTwo(unsigned T n)抛出一个编译器错误.我可以以某种方式指定T是无符号的吗?
  2. 有什么东西可以磨练优雅或表现明智吗?

编辑:纠正了代码,它开始是废话

编辑:再次更正了代码.真的对不起.实际上很明显.但无论如何,谢谢你的提示. 我想删除它,但已经有太多的贡献.

Chr*_*ung 7

如果你希望你的功能是通用的,你明确想要的,你将希望能够使用用户定义的类型,它不具有关键字unsigned.相反,您应该std::numeric_limits用来测试签名(或者,在这种情况下,缺少签名).

您也不应该使用8 * sizeof (T),而是使用numeric_limits(再次)确定您的类型有多少位.:-)