我有一段java代码:
return (int)(seed >>> (48 - bits));
如您所见,它使用无符号右移运算符(>>>)。我试图在ruby中实现这个代码,它没有无符号右移运算符,只有一个有符号的右移运算符。因为我不熟悉>>>算术我不太确定我如何在红宝石中阻止它。我试过做一些搜索,看看之前是否有人遇到过这个问题,但找不到任何相关内容。任何帮助将不胜感激:))
答案 0 :(得分:2)
使用简单的位移和屏蔽可以轻松实现无符号移位运算符:
public static int unsignedShift(int amt, int val) {
int mask = (1 << (32 - amt)) - 1;
return (val >> amt) & mask;
}
掩码的工作原理是将所有位设置为1,这应该在移位后保留。请注意,对于amt&gt; = 32和amt = 0,与Java相比,这会返回不同的结果。