拼接一个短整数的第一个和最后三个数字?
Posted
技术标签:
【中文标题】拼接一个短整数的第一个和最后三个数字?【英文标题】:Splice first and last 3 digits off a short integer? 【发布时间】:2012-01-25 04:20:41 【问题描述】:我在这样的数组中有很多变量:short num = 7123;
。该值始终为 4 位数字。如何把它变成a = 7; b = 123;
?
我能想到的只是转换为 c-string 并将其剥离,但似乎效率不高。
【问题讨论】:
【参考方案1】:b = num % 1000;
a = num / 1000;
【讨论】:
@mcmcc 如果我们要进行微优化,我们应该添加 24,然后右移 10 并完全避免除法和取模...(这是安全的,因为短 int 可以容纳超过 4 位数字,所以没有溢出的机会) @bdares:这适用于前导 1,但不适用于较大的前导数字......? 7024 >> 10 不是 7。 @StilesCrisis 嗯,你是对的。我做错了什么...哦,您必须为每千位右移 10 加 24。...制作一个查找表。 @mcmcc:请参阅我对div()
的回答,这样可以节省手动计算结果。
@bdares:我将其表达为一种优化,但也可以说它的意图更清晰,不像您的查找表(无论如何这可能是反优化)。【参考方案2】:
C 标准库包含div()
,它可以在一个操作中完成:
div_t r = div(num, 1000);
a = r.quot;
b = r.rem;
可以预期 C 标准库具有 div()
的优化实现,它将在一条机器指令中执行除法和余数(在具有此类指令的 CPU 上)。
【讨论】:
【参考方案3】:short a = num / 1000;
short b = num % 1000;
【讨论】:
【参考方案4】:很简单:
a = num / 1000;
b = num % 1000;
【讨论】:
【参考方案5】:// cast to integer should drop the decimal
a = (int) ( num / 1000 );
// use variable a to subtract the thousand place to zero
b = a - num;
【讨论】:
以上是关于拼接一个短整数的第一个和最后三个数字?的主要内容,如果未能解决你的问题,请参考以下文章