register变量的存储问题

死咸鱼的成长之路 2017-10-17 10:24:14
double f( long n )
{
register int i;
register double sum = 1.0;
for( int i = 1 ; i <= n ; i++ )
{
sum = sum*i;
}
return sum;
}
int main()
{
int i,n;
cin >> n;
for( i = 1;i<=n;i++)
cout << i << "!= " <<f(i) << endl;
}

为什么能求到170的阶乘 为什么可以存这么大的数 然而把register去掉也可以 就算是long long int 也就2^64-1 的范围 但是运行显示最大的170!后面有300多个0 这些数据是怎么存储的 或者它存在哪 为什么把register double 改成 register int 结果就截然不同 求大佬指点。
...全文
401 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jobszheng5 2017-10-19
  • 打赏
  • 举报
回复
register关键字 是声明变量的存储位置的,与范围无关。 这个关键字现在很少使用了,编译器会处理这个事情,而且即使你应用了这个关键字,在一些场合,编译器依然会“我行我素”的
paschen 2017-10-18
  • 打赏
  • 举报
回复
double表示的范围大约是:1.79769e+308 ~ 2.22507e-308,具体可搜索浮点数内存表示方式 而int可表示的范围只是:2^31-1 ~ -2^31,long long是:2^63-1 ~ -2^63 这与是否为register没有关系
真相重于对错 2017-10-17
  • 打赏
  • 举报
回复
double的范围是多少

69,373

社区成员

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

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