-1和~0之间有什么区别?

时间:2011-07-18 14:14:06

标签: c++ bitmask ones-complement

标题真的说明了一切:减一和蒂尔达(一补)零之间有什么区别?

在讨论指定所有位都设置的位掩码的最佳方法时出现了这个问题。以下哪项更好?

int func(int value, int mask = -1) {
    return (value & mask);
}

int func(int value, int mask = ~0) {
    return (value & mask);
}

还有其他任何用途吗?

更新:我在stackoverflow.com/q/809227/34509进行过类似的讨论,我在之前的研究中错过了这个讨论。感谢Johannes Schaub指出它。

3 个答案:

答案 0 :(得分:8)

第一个变体依赖于负数的2的补码表示,不一定使用。也可以使用1的补码......或其他编码。我的投票是针对第二种方法

答案 1 :(得分:3)

第二个例子更清楚你要测试的是什么。

答案 2 :(得分:1)

两者都是一样的。除此之外,-1在没有任何警告的情况下与unsigned int配合良好。