我收集到表示R中的64位整数我需要使用double。这很好,但我需要从二进制文件中读取这样一个整数,它存储为Big Endian 64位二进制补码(java长)。
我当然可以读取4字节块中的两个有符号整数,如此
a = readBin(file, integer(), size=4, endian="big")
b = readBin(file, integer(), size=4, endian="big")
但是如何将它们组合在R中以获得我需要的双倍?
答案 0 :(得分:1)
以两个整数而不是双整数来读它肯定更好。小幅度负数的2位补码64位表示(例如-1)是NaN的双精度值,对它们进行算术可能无法按照您的需要进行算法。
首先考虑2的补充问题。我将假设a
是更重要的一半。如果是负数,请注意事实并取整数的2的补码。翻转所有位,然后从b
添加到a
添加中添加一个带。
接下来,将a
转换为double,乘以2 ^ 32,然后添加b
。
如果原始值为负,则否定结果。
请注意,如果原始数字太大,您可能无法得到确切的答案。