我如何在 J 中编写这个 C 表达式?
如何在 J 中编写此 C 表达式? (其中x
是输入整数,a
是临时变量)
((a= ~x & (~x >> 1)) ^= a ? 0 : (a ^ (a & (a - 1))) | (a ^ (a & (a - 1))) << 1);
。
编辑:
以更易读的形式:
int a = (~x) & ((~x) >> 1);
if (a == 0) return 0;
int b = a ^ (a & (a - 1));
return b | (b << 1);
How do I write this C expression in J? (where x
is input integer, and a
is temporary variable)
((a= ~x & (~x >> 1)) ^= a ? 0 : (a ^ (a & (a - 1))) | (a ^ (a & (a - 1))) << 1);
.
Edit:
In a more readable form:
int a = (~x) & ((~x) >> 1);
if (a == 0) return 0;
int b = a ^ (a & (a - 1));
return b | (b << 1);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果没有测试,基本的转录将是这样的:
但可能有一种更聪明的方法。
Without testing, the basic transcription would be something like this:
But there could be a smarter approach.
这是一个小分析(“可读形式”版本):
算法似乎正在寻找
x
0 位> 变量。如果没有,则结果为 0。
如果找到它们,例如在位置
PZ
上,则结果将包含两个设置位:PZ
和PZ+1
。Here is a small analyzis (of the "readable form" version):
It seems that the algorithm is looking for the first 2 (starting from LSB) consecutive
0
bits in thex
variable.If there aren't any, then the result is 0.
If they are found, say on position
PZ
, then the result will contain two set bits:PZ
andPZ+1
.