所以我有以下功能:
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/