免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3329 | 回复: 10
打印 上一主题 下一主题

Linux 下C编程的困惑, 求2^32 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-05 14:18 |只看该作者 |倒序浏览
环境说明, ubuntu 10.04 amd64
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

我照书上写了一个求X的N次方的小程序代码如下.
#include <stdio.h>
float chen(int x,int y)
{
        int i,z;
        for(i=1,z=x;i<y;i++)
                z=z*x;
        return z;
}
void main(void)
{
        printf("%.0f\n",chen(2,32));
}

求得2的32次方是0; 2的31次方是-2147483648.
我想请教一下前辈们.我要怎样求出比这更大的值了?比如,2的64方,圆周率的后的100位小数.....,请大家赐教,不胜感激.谢谢!

论坛徽章:
0
2 [报告]
发表于 2010-09-05 14:24 |只看该作者
你试试定义的时候用long, 溢出了。

论坛徽章:
0
3 [报告]
发表于 2010-09-05 14:32 |只看该作者
http://bbs.chinaunix.net/post.ph ... =1779888&extra=
试过了一样,我的sizeof(long)=8,得 到2^32也是0

论坛徽章:
1
天蝎座
日期:2014-02-28 16:08:53
4 [报告]
发表于 2010-09-05 14:53 |只看该作者
  1. %f
复制代码
是有问题的

论坛徽章:
0
5 [报告]
发表于 2010-09-05 14:59 |只看该作者
回复 3# yjdwbj_cu
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     long long int var = 2;
  5.     var <<= 31;
  6.     char * p = &var;
  7.     int i;

  8.     for (i = 0; i < 8; i++)
  9.         printf("%d ", *p++);
  10.     printf("\n");
  11.     printf("0x%04x", var);

  12.     return 0;
  13. }
复制代码
跑跑这个也许就明白了。
注意报警。

论坛徽章:
0
6 [报告]
发表于 2010-09-05 15:34 |只看该作者
本帖最后由 yjdwbj_cu 于 2010-09-05 15:43 编辑

回复 5# 论坛ID


    能少许解说一下吗?我是初学者,报考自考<<计算机及其应用>>专科,要考<<高级程序设计一>>就是C语言.谢谢!

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09IT运维版块每日发帖之星
日期:2015-09-14 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-16 16:34:21
7 [报告]
发表于 2010-09-05 17:14 |只看该作者
bc
2^32

论坛徽章:
0
8 [报告]
发表于 2010-09-06 08:18 |只看该作者
回复 6# yjdwbj_cu


    因为一个整形是32位,而2的二进制是 0000 0000 0000 0010,每乘一次2就相当于向左移位一次,当移动了31次的时候,就把1溢出去了,剩下的就是 0000 0000 0000 0000了。
    而本来用long long是可以记录这个数字的,因为long long是8字节,但是%d是输出整形的,类型强制转换后就只输出0了。

论坛徽章:
0
9 [报告]
发表于 2010-09-06 08:42 |只看该作者
自己用数组模拟大整数运算

论坛徽章:
0
10 [报告]
发表于 2010-09-06 09:04 |只看该作者
你的问题,把z的类型改成float再试试看
PS:其实建议你用double,输出用%.0lf
PSS:对于数值精度要求很高的计算,比如你所说的圆周率后100位那样的,一般是用数组来模拟一个数值,每个数组项目存一个到多个数值位来实现的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP