真不明白!

C、C++和Java语言
回复
头像
YinzCN
帖子: 141
注册时间: 2006-07-10 22:31
送出感谢: 0
接收感谢: 0

真不明白!

#1

帖子 YinzCN » 2006-07-28 23:25

代码: 全选

main()

{

	long int i,a=2;

	for(i=1; i<=200; i++){
		a = a*2;
	}

	printf("%d\n",a);
}
结果是 0 的
头像
laborer
帖子: 1016
注册时间: 2005-10-25 11:15
送出感谢: 0
接收感谢: 1 次
联系:

#2

帖子 laborer » 2006-07-29 3:54

乘法溢出了,试试这个程序你就明白了

代码: 全选

#include <stdio.h>

int main() {
    printf("%d\n", (1 << 31) * 2);
    return 0;
}
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser
头像
YinzCN
帖子: 141
注册时间: 2006-07-10 22:31
送出感谢: 0
接收感谢: 0

#3

帖子 YinzCN » 2006-07-29 11:23

谢谢!我慢慢研究。。。
头像
ectotherm
帖子: 225
注册时间: 2006-05-23 13:35
送出感谢: 0
接收感谢: 0
联系:

#4

帖子 ectotherm » 2006-08-03 8:27

long int 最多只能装 2 的 32 次方,你那个严重地溢出了。还有 main() 最好要写上 int main(),编译器默认认为不加返回值声明的 main() 返回 int,那个在 c99 中已经被明令淘汰了,编译器只是出于兼容的目的让你通过而已。

ps 请在题目中写清楚不明白什么。
回复

回到 “C/C++/Java”