为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
慕瓜2161724 2017-07-24 22:25:50
#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; }
查看完整描述

3 回答

?
言曌博客liuyanzhao_com

TA贡献164条经验 获得超117个赞

#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

② << 表示左移,右边添0


i=0        即   00000000 00000000 00000000 00000000

i=~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

查看完整回答
反对 回复 2017-07-25
?
言曌博客liuyanzhao_com

TA贡献164条经验 获得超117个赞

你这个代码敲的很多错误吧

查看完整回答
反对 回复 2017-07-25
  • 3 回答
  • 0 关注
  • 1204 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信