C++中的快速按位问题

Bil*_*eal 0 c++ bit-manipulation

我正在寻找一种快速的方法来设置一个基于数字返回位掩码的方法.基本上,在数字输入之前需要发出4个比特.这是我的意思:

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;
}
Run Code Online (Sandbox Code Playgroud)

但它花了很多时间在for循环上做维护.我没有想到的任何聪明的方法吗?

Billy3

CB *_*ley 9

怎么样的:

template <typename T> T foo(unsigned short length)
{
    return (T(1) << (length * 4)) - 1;
}
Run Code Online (Sandbox Code Playgroud)


Lar*_*abe 6

只需创建一个数组,将每个数字映射到适当的位掩码.

例如map [1] = 0x00F等

这将是最快的.