1

标题确实说明了一切:减一和tilda(补码)零有什么区别?

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

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 指出这一点。

4

3 回答 3

8

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

于 2011-07-18T14:16:24.337 回答
3

第二个示例更清楚地说明了您要测试的内容。

于 2011-07-18T14:15:07.633 回答
1

两者都是一样的。除此之外,在没有警告的情况下-1进展顺利。unsigned int

于 2011-07-18T14:17:03.353 回答