【问题标题】:Ruby Unsigned Right ShiftRuby 无符号右移
【发布时间】:2012-01-30 22:30:39
【问题描述】:

我有一个 java 代码的 sn-p: return (int)(seed >>> (48 - bits));

如您所见,它使用无符号右移运算符 (>>>)。我正在尝试在没有无符号右移运算符,只有一个有符号右移运算符的 ruby​​ 中实现此代码。由于我对 >>> 运算符不是很熟悉,所以我不太确定如何在 ruby​​ 中实现它。我尝试进行一些搜索以查看是否有人以前遇到过此问题,但找不到任何相关内容。任何帮助将不胜感激:)

【问题讨论】:

  • seed 的取值范围是多少?是肯定的还是签名的?

标签: java ruby bit-manipulation unsigned


【解决方案1】:

使用简单的位移和掩码可以轻松实现无符号移位运算符:

public static int unsignedShift(int amt, int val) {
    int mask = (1 << (32 - amt)) - 1;   
    return (val >> amt) & mask;
}

掩码通过将移位后应保留的所有位设置为 1 来工作。请注意,对于 amt >= 32 和 amt = 0,与 Java 相比,这会返回不同的结果。

【讨论】:

  • 感谢您提出这项技术,但这段代码看起来不像 Ruby。它看起来像支持无符号移位运算符的 JavaScript。
  • @Jared 这是Java,但这只是为了演示原理。移植到任何其他语言应该是微不足道的。
猜你喜欢
  • 1970-01-01
  • 2012-07-10
  • 2013-01-03
  • 1970-01-01
  • 2017-04-29
  • 2013-01-08
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
相关资源
最近更新 更多