| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 319 人关注过本帖
标题:一个简单的问题
只看楼主 加入收藏
kidangel666
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:93
专家分:139
注 册:2010-9-15
结帖率:78.95%
收藏
已结贴  问题点数:20 回复次数:2 
一个简单的问题
#include<stdio.h>
#include<limits.h>
#include<stdlib.h>
int main()
{
    int i=INT_MAX;
    int j=(i+1);
  printf("%d %d",i,j);
  system("pause");
  return 0;
}

#include<stdio.h>
#include<limits.h>
#include<stdlib.h>
int main()
{
    int i=INT_MAX;
    int j=-(i+1);
  printf("%d %d",i,j);
  system("pause");
  return 0;
}
为什么这2个程序的结果都是
搜索更多相关主题的帖子: include system return 
2012-05-04 23:27
kidangel666
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:93
专家分:139
注 册:2010-9-15
收藏
得分:0 
2147483647   - 2147483648
2012-05-04 23:27
ab1034982749
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:215
专家分:1185
注 册:2012-4-14
收藏
得分:20 
首先因为
  int i=INT_MAX;
    int j=(i+1);
因为i的值以为整形的最大,2147483647(补码:01111111 11111111 11111111 11111111)
加1得到了:补码:(10000000 00000000 00000000 00000000)正好是-2147483648。所以第一个输出为:
2147483647   - 2147483648
然后对于第二个程序由于:2147483647(补码:01111111 11111111 11111111 11111111);
加1 得到 补码:(10000000 00000000 00000000 00000000)也是-2147483648。而又因为你对他取负数
-(10000000 00000000 00000000 00000000)。
所以首先:
你要知道的是当对补码取负数时;其运算方式为:
补码的各位取反然后再加1.
所以对于 10000000 00000000 00000000 00000000 各位取反得到了:
01111111 11111111 11111111 11111111 然后再加1得到了。
10000000 00000000 00000000 00000000这个数的正好也是 - 2147483648 的补码。所以输出结果也为:
2147483647   - 2147483648
2012-05-05 00:21
快速回复:一个简单的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.081781 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved