查找LONG_LONG_MAX中的位数

时间:2014-04-01 18:43:36

标签: c++11

我想在执行

时安全地最小化数组所需的缓冲区
std::string integer_like_type::to_string(long long value){

    std::array<char, WHAT_DO_I_PUT_HERE? +1> buffer;

    int imGood = std::sprintf( buffer, "%d", value);
    std::assert( imGood >= 0 );
    return std::string( buffer );
}

“limits.h”根本没用。

我希望它作为模板参数。

我不是要求

while ( value/=10 ){ digits++; } 

的解决方案。

3 个答案:

答案 0 :(得分:4)

您可以使用std::numeric_limits在编译时查询有关数字类型的信息。您正期待max_digits10

std::array<char, std::numeric_limits<long long>::max_digits10 + 1> buffer;

答案 1 :(得分:2)

取你想要的数字来找到数字,然后在循环中除以10,直到结果为零。


但是,在您的情况下,您正在复制标准C ++库中的功能,并且它的名称恰如其分地命名为std::to_string

答案 2 :(得分:0)

我认为一种常见的方法是

ceil(log10(LLONG_MAX)) + 1;

注意这是运行时因此可能不是最好的答案,使编译时宏可能是一个更好的主意。