按位补码运算符

Cra*_*der 3 c bitwise-operators

你能解释下面的程序吗?

int main() 
{   
 int max = ~0; 
 printf("%d\n",max);    
 return 0; 
}
Run Code Online (Sandbox Code Playgroud)

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

AnT*_*AnT 6

为什么你期望获得"最大值"?在2的补码有符号表示中,全1位模式代表-1.这就是它的方式.

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

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

int main() {   
  unsigned max = ~0u; 
  printf("%u\n", max);    
}
Run Code Online (Sandbox Code Playgroud)