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个问题:
unsigned在nextPowerOfTwo(unsigned T n)抛出一个编译器错误.我可以以某种方式指定T是无符号的吗?编辑:纠正了代码,它开始是废话
编辑:再次更正了代码.真的对不起.实际上很明显.但无论如何,谢谢你的提示. 我想删除它,但已经有太多的贡献.
如果你希望你的功能是通用的,你明确想要的,你将希望能够使用用户定义的类型,它不具有关键字unsigned.相反,您应该std::numeric_limits用来测试签名(或者,在这种情况下,缺少签名).
您也不应该使用8 * sizeof (T),而是使用numeric_limits(再次)确定您的类型有多少位.:-)