标题真的说明了一切:减一和蒂尔达(一补)零之间有什么区别?
在讨论指定所有位都设置的位掩码的最佳方法时出现了这个问题。以下哪项更好?
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指出它。
答案 0 :(得分:8)
第一个变体依赖于负数的2的补码表示,不一定使用。也可以使用1的补码......或其他编码。我的投票是针对第二种方法
答案 1 :(得分:3)
第二个例子更清楚你要测试的是什么。
答案 2 :(得分:1)
两者都是一样的。除此之外,-1
在没有任何警告的情况下与unsigned int
配合良好。