2012-01-30 55 views
1

我的java代码片段: return (int)(seed >>> (48 - bits));红宝石无符号右移

正如你可以看到它使用了无符号向右移位运算符(>>>)。我试图在ruby中实现这个没有无符号右移运算符的代码,只有一个有符号的右移运算符。由于我对>>>运算符不是很熟悉,所以我不太确定我是如何在ruby中实现这一点的。我试着做一些搜索,看看有没有人遇到过这个问题,但找不到任何相关的东西。任何帮助,将不胜感激:)

+0

'seed'的值范围是什么?积极还是签名? – Joe 2012-01-30 23:08:09

回答

2

一个无符号移位操作者可以容易地使用简单的比特移位和掩蔽来实现:

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

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

+0

感谢您提供技术,但此代码看起来不像Ruby。它看起来像支持无符号移位运算符的JavaScript。 – 2016-09-23 08:58:52

+0

@Jared这是Java,但这只是为了说明原理。对于任何其他语言都应该是微不足道的。 – Voo 2016-09-23 09:41:01