有没有可能在J中对数字进行算术运算,并让它们的行为像在类似C的语言中那样?也就是说,如果我从两个32位(我想是64位)的数字开始,有没有办法加减它们,让它们像C/C++/Java中那样溢出/下溢/回绕?
发布于 2015-01-22 05:01:43
因此,处理溢出的一种直接方法是使用残差(|):
(2x ^ 32) | 4000000000 + 1000000000
705032704
overflow =: ] |~ 2x ^ [
32 overflow 4000000000 + 1000000000
705032704您可以使用Base (#.)和Antibase (#:)生成值的二进制表示形式:
[ 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可能有一些更酷的方法来使用外部(!:)系统函数来做到这一点,但我无法做到这些。
https://stackoverflow.com/questions/28074018
复制相似问题