【发布时间】:2014-04-24 00:27:23
【问题描述】:
比较两个位向量的最有效方法是什么?在 Objective-C 中,我使用 CFBitVectors 并简单地比较两者中的每一位:
for (CFIndex bitIndex = 0; bitIndex < numBits; bitIndex++) {
if (CFBitVectorGetBitAtIndex(thisVector, bitIndex) != CFBitVectorGetBitAtIndex(thatVector, bitIndex)) {
return NO;
}
}
return YES;
这很好用,但我不确定是否有更有效的方法来使用位运算符。
【问题讨论】:
-
根据你有多少位,为什么不调用
CFBitVectorGetBits并将它们转储到一个零无符号int或long,然后比较是否相等? -
请去掉“C”标签。这与 C 无关。
-
@r-d 代码是 C,我希望答案也是。所以,被你的评论弄糊涂了。
-
@r-d 划掉我之前的评论。我忘记了向量对象是不透明的,无法直接访问底层位数组。所以,是的,在这种情况下不是那么 C-ish。
-
@PaulGriffiths 我可以有相当大的位向量,但我想我可以将它们分成 32 位或 64 位部分并比较整数值。不过,不确定这是否会更有效,而且我希望代码不会那么清晰。
标签: objective-c bit-manipulation equivalent bitvector