所以我有以下功能:

static int calcDTSize( int depth )
{
    if ( depth <= 8 )
    {
        return 1;
    }
    if ( depth <= 16 )
    {
        return 2;
    }
    if ( depth <= 32 )
    {
        return 4;
    }
    if ( depth <= 64 )
    {
        return 8;
    }

    throw std::exception( "Invalid bit count" );
}

它计算指定位数所需的数据类型的大小。本来我只有:
return ( (int) std::ceil( (double) depth / 8.0 ) );

但是,在我所知道的大多数计算机上,没有3个字节长的数据类型。

我敢肯定,如果没有if语句,必须有一种更整洁的计算方法,但是我不知道怎么做。

任何人都有更好的解决方案?

最佳答案

除以8并四舍五入至最接近的2的幂。

考虑到输入是有限的并且信息是完全静态的,因此我可能会将其放在查找数组中并执行

if (depth <= 64)
    return lut[depth];

throw std::exception( "Invalid bit count" );

如果您不希望在lut中输入64个条目,则可以执行以下操作
static int calcDTSize( int depth )
{
  static int lut[] = { 0, 1, 2, 4, 4, 8, 8, 8, 8 };

  if (depth <= 64)
    return lut[(depth - 1 >> 3) + 1];

  throw std::exception();
}

关于c++ - 位数的数据类型大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6097543/

10-11 16:55