隐式类型转换

Par*_*ita 1 c

#include<stdio.h>
int main(void)
{ 
  signed int a=-1;
  unsigned int b=1;
  int c= a+b;
  printf("%d\n",c);

  return 0;
  }
Run Code Online (Sandbox Code Playgroud)

根据隐式类型转换的规则,如果一个操作数是unsigned int,则另一个将转换为unsigned int,并且结果将unsigned int处于二进制操作中.所以这里bunsigned int,a应类型强制转换为unsigned int.作为unsigned int类型总是+ VE,所以值a将是1.so c=1+1=2.但输出0.如何?

Jer*_*fin 16

-1,当转换为无符号将成为该类型的最大可能值 - 例如,使用32位无符号,它将是4,294,967,295.当你向它添加1时,值"环绕"为0.