我将一些以64位整数存储标志数组的代码转换为不具有64位整数的环境。所以我需要从:
bool isBitSet(unsigned long long allBits, int bitOrdinal) // print isBitSet(15908558073855, 44)
为:
bool isBitSet(string allBits, int bitOrdinal) // print isBitSet("15908558073855", 44)
当然,在源环境中,该函数使用按位运算并且非常简单。目标环境可以使用按位运算,但是在任何时候都不能使用足够长的整数来表示所有位。
我还需要一个setFlag,clearFlag。
之前有人必须解决这个问题吗?
答案 0 :(得分:0)
我的解决方案是将按位操作委托给目标平台,而不是在Monkey-x语言中进行。对于html5 /浏览器目标,由于javascript本身并没有64位整数,我回到了同样的挑战,除了...在javascript中,这条线索已经开始,我能够使用它很好BigInteger.js。
请注意,在BigInteger.js中,我最初寻找的是魔法,如果在某些时候我真的需要在Monkey-x中完成所有操作,我可以从javascript转换所需的函数。
没有一些代码的SO答案是什么,所以这里使用BigInteger.js来确定是否从十进制字符串设置了一个位。当然,繁重的工作在bigInt构造函数和 shiftLeft 和 和 方法中:
NativeUtil.IsBitSet = function(decimalString, bitIndex)
{
theBit = bigInt(1).shiftLeft(bitIndex);
bits = bigInt(decimalString);
bitsAnded = bits.and(theBit);
if (bitsAnded.greater(0) )
return true;
return false;
}