如何比较两位向量的等价性?

时间:2014-04-24 00:27:24

标签: objective-c bit-manipulation equivalent bitvector

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

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

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

1 个答案:

答案 0 :(得分: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;
}