确保Ruby中按位操作的可变大小

时间:2013-01-18 05:30:35

标签: ruby bit-manipulation

我有一组十六进制值来描述ruby中的一个对象,我希望将它们全部串在一起形成一个位桶。在C ++中,我将执行以下操作:

int descriptor = 0 // or uint64_t to be safe
descriptor += (firstHexValue << 60)
descriptor += (secondHex << 56)
descriptor += (thirdHex << 52)
// ... etc
descriptor += (sixteenthHex << 0)

我想在Ruby中做同样的事情,但由于Ruby是无类型的,我担心溢出。如果我尝试在Ruby中做同样的事情,有没有办法确保descriptor包含64位?一旦描述符被设置,我不想突然发现只有32位表示,我已经丢失了一半!如何安全地获得与上述相同的结果?

注意:如果相关,请使用OS X 64位。

1 个答案:

答案 0 :(得分:4)

Ruby拥有无限的整数,所以不要担心。你不会丢失一点。

a = 0

a |= (1 << 200)

a # => 1606938044258990275541962092341162602522202993782792835301376