这个代码具体每一句怎么理解的,求解求解

#include <stdio.h>
int main()
{
int i=0;
i=~i;
i=i<<(sizeof(unsigned int)*8-1);
i--;
printf("%d\n",i);
prontf("%d\n"i+1);
return 0;
}

慕瓜2161724
浏览 1205回答 3
3回答

言曌博客liuyanzhao_com

#include <stdio.h> int main() { //int  -2147483648~2147483647       int i=0; // 00000000 00000000 00000000 00000000      0     i=~i;      //  11111111 11111111 11111111 11111111      -1     i=i<<(sizeof(unsigned int)*8-1);// 10000000 00000000 00000000 00000000     -2147483648 i--;     printf("%d\n",i);       //   01111111 11111111 11111111 11111111            2147483647     printf("%d\n",i+1);     //  10000000 00000000 00000000 00000000           -2147483648      return 0; }64位系统机器下,这一题,我们最好化成2进制来算,int是4个字节,每个字节8位,总共32位所以 int的范围是  -2147483648~2147483647也就是说,最大数+1=最小数,最小数-1=最大数,这个应该可以理解吧① ~ 表示求反,0变成1,1变成0② << 表示左移,右边添0i=0        即   00000000 00000000 00000000 00000000i=~i      即   11111111 11111111 11111111 11111111  i=i<<31即  10000000 00000000 00000000 00000000 i=i-1     即   01111111 11111111 11111111 11111111    i=i+1    即   10000000 00000000 00000000 00000000

言曌博客liuyanzhao_com

你这个代码敲的很多错误吧
打开App,查看更多内容
随时随地看视频慕课网APP