[英]Fast Bitwise Question in C++
我正在寻找一种快速的方法来设置一种基于数字返回位掩码的方法。 基本上,需要在输入前发射4个1位。 这是我的意思的一个好主意:
foo(1); //返回0x000F foo(2); //返回0x00FF foo(3); //返回0x0FFF foo(4); //返回0xFFFF
我只能使用一个大的switch语句,但是我不知道输入类型的预先宽度。 (这是一个模板功能)
这是我尝试的第一件事:
template <typename T> T foo(unsigned short length)
{
T result = 0xF;
for (unsigned short idx = length; idx > 0; idx--)
{
result = (result << 4 | 0xF);
}
return result;
}
但是在for循环上花费大量时间进行维护。 有没有想到的聪明方法?
比利3
怎么样:
template <typename T> T foo(unsigned short length)
{
return (T(1) << (length * 4)) - 1;
}
只需创建一个将每个数字映射到适当的位掩码的数组即可。
例如map [1] = 0x00F等。
这将是最快的。
如果只是文字,您甚至可以在编译时通过使用meta函数来执行此操作。 劫持查尔斯的想法:
template <typename T, unsigned short L>
struct Foo {
enum { result = (T(1) << (L * 4)) - 1 };
};
std::cout << std::setw(4) << std::setfill('0') << std::hex << Foo<int,3>::result;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.