关于程序中int超过范围的问题

ZHANGJIETING 2010-03-10 02:53:01
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
int n,k;
char *s; //存k进制,或用数组s[100]

s=(char*)malloc(sizeof(int)); //s = new char(4); 也可以
memset(s, '\0', sizeof(int));

while(1)
{
cout<<"输入要转化的数(输入小于0的数退出程序):";
cin>>n;

if(n<0)
{
break;
}

cout<<"请输入要转化的进制";
cin>>k;

itoa(n,s,k); //将n转为k进制
cout<<"转化为%d进制是:"<<s<<endl;
}
return 0;
}

如果说是int越界,那输入1000000000为什么可以呢?但是再多加一个0就不可以了。
...全文
307 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
FoxSerratifolia 2010-03-10
  • 打赏
  • 举报
回复
楼上的说的都很明白了,楼主可以仔细对照下你的数位
yuzl32 2010-03-10
  • 打赏
  • 举报
回复
用这个吧_i64toa .
huanmie_09 2010-03-10
  • 打赏
  • 举报
回复
sizeof(int),看下编译器整型变量所占的字节数。
如果为4的话,整型数表示的范围应当为:-4294967296~2147483647
楼主使用1000000000做测试时,这个数字式在整型数范围之内的。
如果再加一个0,就越界了。
cattycat 2010-03-10
  • 打赏
  • 举报
回复
__int64是64位整数,可以用这个。
bobo364 2010-03-10
  • 打赏
  • 举报
回复
在32位系统中int是4字节的,32bit,正整数取值范围,和以前的long是一样的,-2147483648 to 2147483647

在32位系统里long的取值和int是一样的
ArmStronger 2010-03-10
  • 打赏
  • 举报
回复
int 32位 有符号最大也就21亿多,你再加个零肯定超范围了
十一文 2010-03-10
  • 打赏
  • 举报
回复
看int的范围了 int 2147483648~2147483647

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧