C 试图理解内联函数

C 试图理解内联函数,c,inline-functions,C,Inline Functions,我正在研究以下功能: inline xint dtally(xint x) { xint t = 0; while (x) t += 1 << ((x % 10) * 6), x /= 10; return t; } inlinexintdtally(xintx) { xint=0; 当(x)t+=1时,这计算t中的数字x中以10为基数的位数,由6个宽度的位字段分隔 请注意,每个移位长度是6的倍数。因此,如果数字为0,则移位为0,如果数字为1,则移位为6,如

我正在研究以下功能:

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

当(x)t+=1时,这计算
t
中的数字
x
中以10为基数的位数,由6个宽度的位字段分隔

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


之所以使用6,我认为是因为它适合64位以下。

您所说的“是什么造就了这个功能”是什么意思?@Deduplicator-是的,刚刚去检查。注释被撤销。xint是什么?如果我们知道那个细节,那么我们可以回答你的问题。那个逗号运算符让我哭了。我希望你在生产代码中没有找到这个。如果是,请告诉我们,这样我们就可以避免那个家伙。这个函数可能有错误(除非你在ILP64系统上),将
1
更改为
(xint)1
x中每个可能的基数10位数的计数,即,输出中的每个6位宽字段应保存与x中偏移量对应的位数的计数。位0-5保存0的数量,位6-11保存1的数量,12-17保存2的数量,等等。