| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 230 人关注过本帖
标题:一个溢出的问题
只看楼主 加入收藏
liandaowei
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-12-20
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
一个溢出的问题
一个溢出的问题
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned a,b;
a=pow(2,31)-1;
b=a+1;
printf("sizeof=%d\n",sizeof(unsigned));
printf("a=%d,b=%d",a,b);
return 0;
}
其中2的31次方减一是2147483647,sizeof(unsigned)的值是4,我以为b输出的是2147483648,而实际输出的是
-2147483648,哪位大哥你帮忙看看,在线等谢谢了!
2010-12-20 10:24
liandaowei
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-12-20
收藏
得分:0 
靠,真他妈的丢人!应该是printf("a=%u,b=%u\n",a,b);
2010-12-20 10:29
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:20 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
unsigned a,b;
a=pow(2,31)-1;//7FFF FFFF  (0111 1111 1111 1111 1111 1111 1111 1111)   2147483647
b=a+1;//上面的+1就变成了8000 0000  (1000 0000 0000 0000 0000 0000 0000 0000)
//那么这个数的最高位是1 所以他是个负数
//求补运算(按位取反再加1)就得到了1000 0000 0000 0000 0000 0000 0000 0000
//也就是2147483648  再加上个负号  就是-2147483648
printf("sizeof=%d\n",sizeof(unsigned));
printf("a=%d,b=%d",a,b);
return 0;
}
当你加1之后  不会溢出  会是符号位改变而已

                                         
===========深入<----------------->浅出============
2010-12-20 11:02
快速回复:一个溢出的问题
数据加载中...
 
   



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

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