【发布时间】:2013-01-10 15:32:35
【问题描述】:
有人来挑战吗?我正在寻找一种有效的算法来实现固定最大值的数字的换行/溢出行为。
说,最大可能的数值定义为:
#define MAX_NUMBER_VALUE 100
还有一个函数translate,它接受一个带符号的 32 位或 64 位整数值,并使用 MAX_NUMBER_VALUE 常量“环绕”它:
int_fast8_t translate(int_fast32_t value) {
if (abs(value) > MAX_NUMBER_VALUE) {
return ...; // This!
}
return value;
}
预期的输入和输出:
translate(55) => 55
translate(100) => 100
translate(101) => -100
translate(102) => -99
translate(200) => -1
translate(202) => 1
translate(300) => 99
translate(-40) => -40
translate(-100) => -100
translate(-101) => 100
translate(-102) => 99
translate(-200) => 1
translate(-201) => 0
...
值围绕数字“走动”,就好像它是一个圆形行星。这看起来确实类似于 C/C++ 处理 int 溢出条件的方式。我想知道是否有一种快速有效的方法来实现这种包装?像移位或其他按位运算一样?
【问题讨论】:
-
您是在描述
%运算符吗? -
你基本上需要对
MAX_NUMBER_VALUE*2 - 1做一个模数...