如何在J中编写此C表达式?(x输入整数在哪里,a是临时变量)
((a= ~x & (~x >> 1)) ^= a ? 0 : (a ^ (a & (a - 1))) | (a ^ (a & (a - 1))) << 1);
Run Code Online (Sandbox Code Playgroud)
.
以更易读的形式:
int a = (~x) & ((~x) >> 1);
if (a == 0) return 0;
int b = a ^ (a & (a - 1));
return b | (b << 1);
Run Code Online (Sandbox Code Playgroud)
没有测试,基本的转录将是这样的:
Shift =: (33 b.)
And =: (17 b.)
Not =: (26 b.)
Xor =: (22 b.)
Or =: (23 b.)
BastardFunction =: 3 : 0
a =. (Not y) And (_1 Shift (Not y))
if. a do.
b =. a Xor (a And a - 1)
(1 Shift b) Or b
else.
0
end.
)
Run Code Online (Sandbox Code Playgroud)
但是可能有一个更聪明的方法.