Math 是否可以添加32位整数,并在J中环绕?

Math 是否可以添加32位整数,并在J中环绕?,math,int,j,Math,Int,J,是否可以对J中的数字进行算术运算,并让它们像在类似C的语言中一样工作?也就是说,如果我从两个32位(或者我想是64位)的数字开始,有没有办法加上或减去它们,让它们像在C/C++/Java中那样溢出/下溢/缠绕?所以,处理溢出的一个直接方法是使用剩余(): 您可以使用Base(。)和Antibase(:)生成值的二进制表示: 对于外文(!:)系统函数,可能有一些更酷的方法可以做到这一点,但我无法理解。对于我们这些不太熟悉C或Java的人,您特别想要什么行为?例如,您是否希望FFFFFFFF加上00

是否可以对
J
中的数字进行算术运算,并让它们像在类似C的语言中一样工作?也就是说,如果我从两个32位(或者我想是64位)的数字开始,有没有办法加上或减去它们,让它们像在C/C++/Java中那样溢出/下溢/缠绕?

所以,处理溢出的一个直接方法是使用剩余(
):

您可以使用Base(
)和Antibase(
)生成值的二进制表示:


对于外文(
!:
)系统函数,可能有一些更酷的方法可以做到这一点,但我无法理解。

对于我们这些不太熟悉C或Java的人,您特别想要什么行为?例如,您是否希望FFFFFFFF加上00000001等于00000000?还有,为什么?你认为用这种行为解决问题更容易吗?你的例子抓住了本质。我的应用程序是我试图在
J
中实现的,只是为了运动。考虑到J可以托管自己的UI,我想这取决于它,但它看起来并不想这样做。:)我还需要32位
mul
行为。我想我可以在每次手术后做mod 2^32。这将使我处于正确的邻域中,但在表上留下一些性能。@fuz我在最初的帖子中不清楚,但我们在这里谈论的是无符号。我想你可以通过找到索引(
I.|.2{reg
),然后移动每个索引的值(
1.|.2{reg
)来获得二进制乘法并对结果进行总结。
   (2x ^ 32) | 4000000000 + 1000000000
705032704
   overflow =: ] |~ 2x ^ [
   32 overflow 4000000000 + 1000000000
705032704
   [ reg =: (32 $ 2) #: 1 2 3 4294967294 4294967295 4294967296 4294967297
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
   3 { reg
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
   #. 3 { reg
4294967294
   #. reg
1 2 3 4294967294 4294967295 0 1
   (32 $ 2)&#: #. +/ 0 2 { reg
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
   (32 $ 2)&#: #. +/ 0 4 { reg
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0