鱼C论坛

 找回密码
 立即注册
查看: 2267|回复: 14

想写一个求2的64次方的代码

[复制链接]
发表于 2021-10-1 19:00:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

                               
登录/注册后可看大图

出现以上内容,请问大神,为什么2的32次方和2的64次方的结果是一样的
写的程序如下:
#include <stdio.h>
#include <math.h>
int main(void)
{
            unsigned int result = pow(2,64) -1;
            printf("result = %u\n",result);
            return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-1 19:11:33 | 显示全部楼层
#include <stdio.h>
#include <math.h>

int main(void)
{
    unsigned long long result = pow(2,64) -1;
    printf("result = %llu\n",result);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-1 19:18:24 | 显示全部楼层
#include <stdio.h>
#include <math.h>

int main(void)
{
    double result = pow(2, 64) - 1;
    printf("result = %.f\n", result);

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-1 20:44:24 | 显示全部楼层
不是有警告么,隐式常量溢出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-1 21:33:06 | 显示全部楼层

照着这个代码得出18446744073709551616,可是不知道为啥要用double,取职范围讲了不是要用unsigned吗,double不是双精度小数吗。。。。不明白。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-1 21:34:58 | 显示全部楼层

我照 着您说的代码打进去得出的还是4294967295这个,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-1 21:38:04 | 显示全部楼层
317109954 发表于 2021-10-1 21:34
我照 着您说的代码打进去得出的还是4294967295这个,

看看你的
#include <stdio.h>
#include <stdint.h>

int main(void)
{
    printf("unsigned long long: %lu\n", sizeof(unsigned long long));
    printf("uint64_t: %lu\n", sizeof(uint64_t));
    return 0;
}
$ ./main
unsigned long long: 8
uint64_t: 8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-1 22:10:32 | 显示全部楼层
本帖最后由 hrpzcf 于 2021-10-1 22:41 编辑
317109954 发表于 2021-10-1 21:33
照着这个代码得出18446744073709551616,可是不知道为啥要用double,取职范围讲了不是要用unsigned吗,dou ...


我也不懂,刚学C几天,看见pow返回double类型改的,果然出错了

(2**64)-1 = 18446744073709551615 才对。

可能是因为2的64次方经超过所有类型的精度上限了, pow 返回的值也是不精确的,所以没办法精确算出减 1 后的值, 百度了一下说要用数组解决。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-4 00:47:40 | 显示全部楼层

我接着再试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-4 09:05:20 | 显示全部楼层
常规类型是不够放了的,那么就用字符串来放(字符串和数字是可以互相转的);
下面手打的,你自己改下格式吧,还有那个跳过循环英文单词不会写,填好应该就可以了
int main()
{
        //初始化
        char c_str[32];
        memset(c_str,'0',sizeof(c_str));
        c_str[0]='1';

        int index = 0;
        int aaaa  =0;

        //循环64次
        for(int i=0;i<64;i++)
        {
                //依次写入c_str;
                for(int j =0;j<32;j++)
                {
                        index    = (c_str[j]-'0')<<1;
                        c_str[j] = index +aaaa +'0';
                        aaaa     = index /10;
                }

        }

        for(int i =31;i>=0;i--)
        {
                if(c_str[i] != 0)                
                {
                        conti      ;       //这个是跳过此次循环,单词忘记了
                }
                std::cout<<c_str[i]<<std::endl;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-4 09:55:02 | 显示全部楼层
为什么2的32次方和2的64次方的结果是一样的?
答:跟系统大小有关,在32位系统unsigned int的取值范围就那么大,只占4个字节,你非要分配8个字节,系统只能按照4个字节处理,但是你用64位系统去编译结果就不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

匿名鱼油
匿名鱼油  发表于 2021-10-4 17:29:21
本帖最后由 匿名 于 2021-10-4 17:32 编辑

#include<stdio.h>
int main()
{
        int a[100]={1};
        int n;
        scanf("%d",&n);
        int i,j,k;
        for(i=0;i<n;i++)
       {
               for(j=n-1;j>=0;j--)
              {
                    a[j]=a[j]+a[j];
                    if(a[j]>9)
                    {
                            a[j]=a[j]-10;
                            a[j+1]++;
                    }
              }
        }
        for(k=99;k>=0&&a[k]==0;k--);
        for(;k>=0;k--)
        {
                        printf("%d",a[k]);
        }       
        return 0;
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-4 21:54:52 | 显示全部楼层
2736946915 发表于 2021-10-4 09:05
常规类型是不够放了的,那么就用字符串来放(字符串和数字是可以互相转的);
下面手打的,你自己改下格式吧 ...

哇,,谢谢,刚学到字符,是在做数据类型的课后作业遇到的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-4 21:56:11 | 显示全部楼层

for,,,scanf这些,我还没有学,if都还没有学,是在数据类型这一节课后作业的题,,谢谢啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-4 21:57:21 | 显示全部楼层
易道云 发表于 2021-10-4 09:55
为什么2的32次方和2的64次方的结果是一样的?
答:跟系统大小有关,在32位系统unsigned int的取值范围就那 ...

不会吧,,,,好吧,,,我再看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 00:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表