目标c-如何比较两个比特向量的等价性



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

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

这很好,但我不确定是否有更有效的方法来使用位运算符。

可以对两个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;
}

最新更新