繁体   English   中英

C ++中的快速按位问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM