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

zen*_*hoy 1 c++ bitmask ones-complement

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

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

int func(int value, int mask = -1) {
    return (value & mask);
}
Run Code Online (Sandbox Code Playgroud)

要么

int func(int value, int mask = ~0) {
    return (value & mask);
}
Run Code Online (Sandbox Code Playgroud)

是否还有其他任何用途?

更新:在stackoverflow.com/q/809227/34509上有关于此主题的类似讨论,我在之前的研究中遗漏了这个问题 .感谢Johannes Schaub指出它.

Arm*_*yan 8

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