从数字字符串返回位状态的算法?

时间:2014-12-05 00:57:33

标签: algorithm bit-manipulation

我将一些以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。

之前有人必须解决这个问题吗?

1 个答案:

答案 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;
}
相关问题