gpt4 book ai didi

c++ - 适合无符号(自然)数的任何值的宽度

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:07 25 4
gpt4 key购买 nike

背景

我有一个日志系统,可以将记录输出到 std::ostream .每条记录都用一个计数器进行注释,该计数器随着每个输出而增加 1,如下所示:

=====  Batch # 5  =====
This is the fifth record
===== Batch # 19 =====
This is the nineteenth record
===== Batch # 187 =====
Who knows to spell *that*?

计数器是 std::size_t ,即无符号整数。

问题

就像现在一样,输出的数字没有任何填充,看起来很难看。我想实现这一目标:

=====  Batch #     5  =====
This is the fifth record
===== Batch # 19 =====
...
===== Batch # 187 =====
===== Batch # 12345 =====

使流对象处理这可以通过 std::setw 实现.但是,我仍然需要知道有多少位数字以 10 为底表示最大可能值。

请求

解决方案必须静态计算(即在翻译时)有多少位采用 std::size_t 的最大可能值的 base-10 表示.我欢迎任何满足此要求的方法,尽管我更喜欢那些使用 C++14(宽松)的方法 constexpr

提示和我尝试过的事情

似乎以 B 为底的自然数 N 的表示需要与(N 的 B 索引对数)截断加 1 一样多的数字。例如,值 100 在以 10 为底的情况下是三位长, 和 common logarithm 100加1等于3;值 1234 是以 10 为底的四位数字,并且(1234 的常用对数)加 1 的截断是 4。在伪东西中:

digits( value , base ) = floor( logarithm( radicand=value , index=base ) ) + 1

对于解释和格式的懒惰,我深表歉意;如果有人知道更好的方法,请随时编辑我的帖子或提出建议。你可以试试这个 here .好像可以,但是我没有彻底验证过。

至于最大值a std::size_t对象可以容纳,它是std::numeric_limits<std::size_t>::max() .


我打算回答这个问题。我会在发布我的答案之前给一些时间,并在接受任何答案之前等待更多时间。

最佳答案

关于c++ - 适合无符号(自然)数的任何值的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27459926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com