我有一组十六进制值来描述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位。
答案 0 :(得分:4)
Ruby拥有无限的整数,所以不要担心。你不会丢失一点。
a = 0
a |= (1 << 200)
a # => 1606938044258990275541962092341162602522202993782792835301376