如何进行人工下溢/溢出?

How to make artificial underflow/ overflow?

我想在我的程序中将计算限制在 0-360 的范围内。我知道如果你有一个 8 位整数,加上 255 + 1 将溢出到 0,同样地,0 - 1 将下溢到 255。 我写这个函数作为测试:

//only for negative numbers
function clampTo360 (a) {
  if (a < 0) {
    var b = 361 + a;
    if (b > 0) {
      return b;
    } else {
      clampTo360(b);
    }
  }
}

有没有更好的方法来编写函数代码,以便计算 0 - 1 将 return 360?

您可以添加 360 以获得正值,return 余数。

function clampTo360(g) {
    const rest = g % 360;
    return rest < 0 ? 360 + rest : rest
}

console.log(clampTo360(365));  //   5
console.log(clampTo360(-5));   // 355
console.log(clampTo360(700));  // 340
console.log(clampTo360(-700)); //  20

您可以在此处使用取模运算符。但是,下溢输入将导致负值。

为避免这种情况,您可以添加 360 以获得区间 [0; 720) 中的数字,然后再次应用模运算符以获得 0 和 [=11= 之间的结果]:

function clampTo360(g) {
    return (g % 360 + 360) % 360
}
console.log(clampTo360(720))
console.log(clampTo360(360))
console.log(clampTo360(-360))
console.log(clampTo360(-720))