#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
- 3 回答
- 0 关注
- 1204 浏览
添加回答
举报
0/150
提交
取消