如何简化模运算?

Tha*_*you 5 javascript arithmetic-expressions modulo

我有

let f = x => x % 4 === 0 ? 0 : 4 - x % 4
Run Code Online (Sandbox Code Playgroud)

但这是一个垃圾功能。救命。

x 永远不会消极。


这是真相表之类的东西。

x   x % 4     4 - (x % 4)     f(x)
0   0         4               0
1   1         3               3
2   2         2               2
3   3         1               1
4   0         4               0
5   1         3               3
6   2         2               2
7   3         1               1
8   0         4               0
9   1         3               3
Run Code Online (Sandbox Code Playgroud)

我正在尝试在此处找到一些相关性,但是已经晚了,我认为我的大脑无法正常工作。zz

我在f(x)列中看到的是一种反向模数,因此输出从032103210 ...而不是01230123 ...开始循环。

我感觉到某些用途Math.maxMath.min与之结合使用Math.abs可能会有所帮助…… x * -1在某处也可能存在……

您能帮我写的f东西不会那么糟吗?

fre*_*ish 3

像这样的事情肯定会做:

(4 - (x % 4)) % 4
Run Code Online (Sandbox Code Playgroud)

这里还有一些真相:

x   x % 4     4 - (x % 4)     (4 - (x % 4)) % 4
0   0         4               0
1   1         3               3
2   2         2               2
3   3         1               1
4   0         4               0
5   1         3               3
6   2         2               2
7   3         1               1
8   0         4               0
9   1         3               3
Run Code Online (Sandbox Code Playgroud)

  • 我将接受这个答案,因为这是第一个正确的答案,并且没有任何问题。对于未来找到这个问题/答案的人,请参阅其他用户提供的两个按位解决方案 - 他们非常棒。 (3认同)