鱼C论坛

 找回密码
 立即注册
查看: 1589|回复: 9

[已解决]我这里为什么输不出结果

[复制链接]
发表于 2022-1-9 10:39:27 | 显示全部楼层 |阅读模式
5鱼币
#include <stdio.h>
#include <math.h>
#define NUM 32
int main()
{
    unsigned int a = 0, b = 0;
    int i = 31, j = 0;
    int c[NUM] = {0};
    int d[NUM] = {0};

    scanf("%d", &a);
    //下面的功能是实现一个二进制逆序的
    while (i--)
    {
        c[i] = a % 2;  //这里把a%2的余数从索引31往下递减赋值给 c 数组
        d[j++] = c[i];  //这里把c的值赋给j数组
        b += d[j] * pow(2, i); 
        //因为int是4字节即32位所以从2^32依次递减指数跟d数组的值相乘
        a=a/2;
    }
    printf("%d \n",b);
}

为什么我的运行后不行。。。不输出结果
最佳答案
2022-1-9 10:39:28
#include <stdio.h>
#include <math.h>
#define NUM 32
int main()
{
    unsigned int a = 0, b = 0;
    int i = 31, j = 0;
    int c[NUM] = {0};
    int d[NUM] = {0};

    scanf("%d", &a);
    //下面的功能是实现一个二进制逆序的
    while (i--)
    {
        printf("a:%u b:%u i:%d j:%d\n", a, b, i, j); // <-----------------------------多加这一行你就清楚知道什么事了
        c[i] = a % 2;  //这里把a%2的余数从索引31往下递减赋值给 c 数组
        d[j++] = c[i];  //这里把c的值赋给j数组
        b += d[j] * pow(2, i); 
        //因为int是4字节即32位所以从2^32依次递减指数跟d数组的值相乘
        a=a/2;
    }
    printf("%d \n",b);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 10:39:28 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
#include <math.h>
#define NUM 32
int main()
{
    unsigned int a = 0, b = 0;
    int i = 31, j = 0;
    int c[NUM] = {0};
    int d[NUM] = {0};

    scanf("%d", &a);
    //下面的功能是实现一个二进制逆序的
    while (i--)
    {
        printf("a:%u b:%u i:%d j:%d\n", a, b, i, j); // <-----------------------------多加这一行你就清楚知道什么事了
        c[i] = a % 2;  //这里把a%2的余数从索引31往下递减赋值给 c 数组
        d[j++] = c[i];  //这里把c的值赋给j数组
        b += d[j] * pow(2, i); 
        //因为int是4字节即32位所以从2^32依次递减指数跟d数组的值相乘
        a=a/2;
    }
    printf("%d \n",b);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 11:04:24 | 显示全部楼层
我有个小技巧,对于编写大量代码,或循环语句等,最终结果不如预期,可以用这个技巧(相信很多人都和我一样吧,哈哈哈)
试试在想检查代码的地方,打印参数出来,就可以清楚知道编译器运行到此处参数变成什么了,有没有错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 11:07:53 | 显示全部楼层
有无输入样式
是输入4 输出 001 吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-1-9 11:54:04 From FishC Mobile | 显示全部楼层
大马强 发表于 2022-1-9 11:07
有无输入样式
是输入4 输出 001 吗?

输入4 转换
00000000 00000000 00000000 00000100
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 11:57:02 | 显示全部楼层
#include <stdio.h>

int main()
{
    unsigned a;
    unsigned num[32] = {0};
    scanf("%u", &a);
    for(int i = 31; a; i--){
        num[i] = a%2;
        a >>= 1;
    }
    printf("0b");
    for(int i = 0, flag = 0; i < 32; i++){
        if(num[i]) flag = 1;
        if(flag) printf("%u", num[i]);
    }
    return 0;
}
14
0b1110
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-1-9 12:32:19 From FishC Mobile | 显示全部楼层
傻眼貓咪 发表于 2022-1-9 11:57

这个我还要做成二进制倒序。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 13:02:22 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2022-1-9 13:04 编辑
BlackWhite_idea 发表于 2022-1-9 12:32
这个我还要做成二进制倒序。。

这样?
#include <stdio.h>

int main()
{
    unsigned a;
    unsigned num[32] = {0};
    scanf("%u", &a);
    for(int i = 0; a; i++){
        num[i] = a%2;
        a >>= 1;
    }
    for(int i = 31; i > -1; i--){
        printf("%u", num[i]);
    }
    return 0;
}
14
00000000000000000000000000001110
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 13:07:05 | 显示全部楼层
BlackWhite_idea 发表于 2022-1-9 11:54
输入4 转换
00000000 00000000 00000000 00000100

输入4 转换
00000000 00000000 00000000 00000100

**这不是倒序啊,4 确实是 100(二进制)啊,只是前面的零照常输出而已?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 13:12:27 | 显示全部楼层
#include <stdio.h>

void reverse(unsigned int value, size_t count) {
    if(count == 0) return;
    reverse(value, count - 1);
    if(value & (1 << (count - 1))) printf("1");
    else printf("0");
    if(count % 8 == 0) printf(" ");
}

int main(void) {
    reverse(4, 32);
    puts("");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 18:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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