c - 按位补码运算符

标签 c bitwise-operators

请大家解释一下下面的程序

int main() 
{   
 int max = ~0; 
 printf("%d\n",max);    
 return 0; 
}

AFAIK ~ 将翻转位。在这种情况下,即 ~0 会将所有位设置为 1。因此 max 变量应包含 MAX 值,但我将 o/p 设置为 -1。所以这里的任何人都可以告诉我为什么我得到 o/p 为 -1。

最佳答案

为什么期望获得“最大值”?在 2 的补码符号表示中,全 1 位模式代表 -1。它就是这样。

2 的补码符号表示中的最大值由 01111...1 位模式表示(即第一位是 0)。你得到的是 1111...1,这显然是负数,因为第一位 - 符号位 - 是 1

如果您想要一个补零产生“最大值”的示例,请使用无符号表示

int main() {   
  unsigned max = ~0u; 
  printf("%u\n", max);    
}

关于c - 按位补码运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7274753/

相关文章:

c - scanf 加载 struct -> char[] 的问题

c - 使指针指向另一个 C 程序

c - 如何添加两个不同的数组?

python-3.x - ~ Python 3 中的二进制补码

c - 如何解释位右移两个不同的结果?

java - 寻找位运算符

c - 给定数据类型的算术运算成本是否随操作数值而变化?

c - Go中的递归链表类型别名

ios - 如何在 Swift 中创建 NS_OPTIONS 风格的位掩码枚举?

java - Java 中按位运算的调试工具