【问题标题】:Trying to understand an inline function试图理解内联函数
【发布时间】:2014-11-29 03:37:27
【问题描述】:

我正在研究以下函数:

inline xint dtally(xint x)
{
    xint t = 0;
    while (x) t += 1 << ((x % 10) * 6), x /= 10;
    return t;
}

我只是想知道是什么让这个功能,即计算并存储在变量t中。

【问题讨论】:

  • 你所说的“是什么让这个功能”是什么意思?
  • @Deduplicator - 是的,刚刚去检查了。评论已撤销。
  • 什么是xint?如果我们知道这个细节,那么我们可以回答您的问题。
  • 那个逗号操作符让我哭了。我希望你没有在生产代码中找到这个。如果是这样,请告诉我们,这样我们就可以避开那个人。
  • 这个函数可能有bug(除非你是ILP64系统),把1改成(xint)1

标签: c inline-functions


【解决方案1】:

这会计算t 中的数字x 中的基数为 10 的位数,由 6 位宽度的位字段分隔。

请注意,每个移位长度都是 6 的倍数。因此,如果数字为 0,则移位为 0,如果数字为 1,则移位为 6,如果数字为 9,则移位为 54,依此类推。

我认为使用 6 的原因是它适合 64 位以下。

【讨论】:

  • x 中每个可能的以 10 为底的数字的计数,即输出中的每个 6 位宽的字段应该包含与 x 中的偏移相对应的数字的计数。第 0-5 位保存 0 的个数,第 6-11 位保存 1 的个数,第 12-17 位保存 2 的个数,依此类推。
猜你喜欢
  • 2020-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
相关资源
最近更新 更多