鱼C论坛

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

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

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

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


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

  10.     scanf("%d", &a);
  11.     //下面的功能是实现一个二进制逆序的
  12.     while (i--)
  13.     {
  14.         printf("a:%u b:%u i:%d j:%d\n", a, b, i, j); // <-----------------------------多加这一行你就清楚知道什么事了
  15.         c[i] = a % 2;  //这里把a%2的余数从索引31往下递减赋值给 c 数组
  16.         d[j++] = c[i];  //这里把c的值赋给j数组
  17.         b += d[j] * pow(2, i);
  18.         //因为int是4字节即32位所以从2^32依次递减指数跟d数组的值相乘
  19.         a=a/2;
  20.     }
  21.     printf("%d \n",b);
  22. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  10.     scanf("%d", &a);
  11.     //下面的功能是实现一个二进制逆序的
  12.     while (i--)
  13.     {
  14.         printf("a:%u b:%u i:%d j:%d\n", a, b, i, j); // <-----------------------------多加这一行你就清楚知道什么事了
  15.         c[i] = a % 2;  //这里把a%2的余数从索引31往下递减赋值给 c 数组
  16.         d[j++] = c[i];  //这里把c的值赋给j数组
  17.         b += d[j] * pow(2, i);
  18.         //因为int是4字节即32位所以从2^32依次递减指数跟d数组的值相乘
  19.         a=a/2;
  20.     }
  21.     printf("%d \n",b);
  22. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2022-1-9 11:07:53 | 显示全部楼层
有无输入样式
是输入4 输出 001 吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

输入4 转换
00000000 00000000 00000000 00000100
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  2. int main()
  3. {
  4.     unsigned a;
  5.     unsigned num[32] = {0};
  6.     scanf("%u", &a);
  7.     for(int i = 31; a; i--){
  8.         num[i] = a%2;
  9.         a >>= 1;
  10.     }
  11.     printf("0b");
  12.     for(int i = 0, flag = 0; i < 32; i++){
  13.         if(num[i]) flag = 1;
  14.         if(flag) printf("%u", num[i]);
  15.     }
  16.     return 0;
  17. }
复制代码
  1. 14
  2. 0b1110
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

这个我还要做成二进制倒序。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

这样?
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     unsigned a;
  5.     unsigned num[32] = {0};
  6.     scanf("%u", &a);
  7.     for(int i = 0; a; i++){
  8.         num[i] = a%2;
  9.         a >>= 1;
  10.     }
  11.     for(int i = 31; i > -1; i--){
  12.         printf("%u", num[i]);
  13.     }
  14.     return 0;
  15. }
复制代码
  1. 14
  2. 00000000000000000000000000001110
复制代码
小甲鱼最新课程 -> https://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(二进制)啊,只是前面的零照常输出而已?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  2. void reverse(unsigned int value, size_t count) {
  3.     if(count == 0) return;
  4.     reverse(value, count - 1);
  5.     if(value & (1 << (count - 1))) printf("1");
  6.     else printf("0");
  7.     if(count % 8 == 0) printf(" ");
  8. }

  9. int main(void) {
  10.     reverse(4, 32);
  11.     puts("");
  12.     return 0;
  13. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 03:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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