0

比较两个位向量的最有效方法是什么?在 Objective-C 中,我使用 CFBitVectors 并简单地比较两者中的每一位:

for (CFIndex bitIndex = 0; bitIndex < numBits; bitIndex++) {
    if (CFBitVectorGetBitAtIndex(thisVector, bitIndex) != CFBitVectorGetBitAtIndex(thatVector, bitIndex)) {
        return NO;
    }
}
return YES;

哪个工作正常,但我不确定是否有更有效的方法来使用位运算符。

4

1 回答 1

0

如this answer中所述,可以对两个 CFBitVectorRef 结构进行按位或运算。但是,这在未来可能会失败,因为它依赖于实现。如 OP 中所述,比较它们的最安全方法似乎是一次一位。这是一个可以完成所有工作的实用函数:

BOOL CFBitVectorEqualsCFBitVector(CFBitVectorRef thisVector,  CFBitVectorRef thatVector) {
    CFIndex numBits = CFBitVectorGetCount(thisVector);
    if (numBits != CFBitVectorGetCount(thisVector)) return NO;
    for (CFIndex bitIndex = 0; bitIndex < numBits; bitIndex++) {
        if (CFBitVectorGetBitAtIndex(thisVector, bitIndex) != CFBitVectorGetBitAtIndex(thatVector, bitIndex)) {
            return NO;
        }
    }
    return YES;
}
于 2015-05-21T21:17:23.303 回答