| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1025 人关注过本帖
标题:问一个简单的问题。
只看楼主 加入收藏
努力学编程
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-8-25
收藏
得分:0 
是的啊,我就在想到底是什么原因?难道是BUG?
2007-08-25 10:12
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
那你先暂时用DEV-C++吧````免得出现类似情况````

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-08-25 10:18
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
http://www.bloodshed.net/devcpp.html

4.0的不能安装``就下5.0(4.9.9.2)``

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-08-25 10:20
qilindh
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-10-7
收藏
得分:0 

tc for windows

得出的结果和楼主一样。

2007-08-25 10:26
百年不亮
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:789
专家分:0
注 册:2006-4-14
收藏
得分:0 
500*500的结果是250000,换成16进制是0x3D090,-12144正好是0xD090,显然是溢出了。
int在tc这样的16位编译器中是2个字节,可存储的最大值是0x7FFFF,就是32767,250000肯定溢出。

因为500被编译器认为是int类型,两个int运算的结果还是int,将溢出后的结果0xD090赋值给long类型后就是0xFFFFD090,也是-12144。解决办法是换一个32位的编译器如vc,dev-cpp,int是4个字节已经够用了。不换编译器改程序也行:
int main(void)
{
long int a;
a=500L*500L; /*告诉编译器500是long类型*/
printf("%ld ",a);
getch();
return 0;
}

[此贴子已经被作者于2007-8-25 10:55:00编辑过]

2007-08-25 10:32
努力学编程
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-8-25
收藏
得分:0 
结果0xD090赋值给long类型后是0x10005090??不明白
2007-08-25 10:43
qilindh
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-10-7
收藏
得分:0 
以下是引用百年不亮在2007-8-25 10:32:28的发言:
500*500的结果是250000,换成16进制是0x3D090,-12144正好是0xD090,显然是溢出了。
int在tc这样的16位编译器中是2个字节,可存储的最大值是0x7FFFF,就是32767,250000肯定溢出。

因为500被编译器认为是int类型,两个int运算的结果还是int,将溢出后的结果0xD090赋值给long类型后就是0x10005090,也是-12144。解决办法是换一个32位的编译器如vc,dev-cpp,int是4个字节已经够用了。不换编译器改程序也行:
int main(void)
{
long int a;
a=500L*500L; /*告诉编译器500是long类型*/
printf("%ld ",a);
getch();
return 0;
}

果然精辟,佩服佩服!

2007-08-25 10:52
百年不亮
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:789
专家分:0
注 册:2006-4-14
收藏
得分:0 

写错了还佩服什么啊,前面我已经改过来了。
将溢出后的结果0xD090赋值给long类型后就是0xFFFFD090

2007-08-25 10:57
努力学编程
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-8-25
收藏
得分:0 

对,就是0xFFFFD090。不过还是要佩服一下百年侠客。呵呵

2007-08-25 11:03
qilindh
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-10-7
收藏
得分:0 
以下是引用努力学编程在2007-8-25 10:43:37的发言:
结果0xD090赋值给long类型后是0x10005090??不明白

0XD090=1101000010010000

第一个1是符号位。扩展后就是0xffff5090了

负数用补码表示(1101000010010000)补=(1010111101110000)=-12144


不知道我理解的对不对?

[此贴子已经被作者于2007-8-25 11:12:20编辑过]

2007-08-25 11:10
快速回复:问一个简单的问题。
数据加载中...
 
   



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

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