BlackWhite_idea 发表于 2022-1-9 10:39:27

我这里为什么输不出结果

#include <stdio.h>
#include <math.h>
#define NUM 32
int main()
{
    unsigned int a = 0, b = 0;
    int i = 31, j = 0;
    int c = {0};
    int d = {0};

    scanf("%d", &a);
    //下面的功能是实现一个二进制逆序的
    while (i--)
    {
      c = a % 2;//这里把a%2的余数从索引31往下递减赋值给 c 数组
      d = c;//这里把c的值赋给j数组
      b += d * 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 = {0};
    int d = {0};

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

傻眼貓咪 发表于 2022-1-9 11:04:24

我有个小技巧,对于编写大量代码,或循环语句等,最终结果不如预期,可以用这个技巧(相信很多人都和我一样吧,哈哈哈)
试试在想检查代码的地方,打印参数出来,就可以清楚知道编译器运行到此处参数变成什么了,有没有错。

大马强 发表于 2022-1-9 11:07:53

有无输入样式
是输入4 输出 001 吗?

BlackWhite_idea 发表于 2022-1-9 11:54:04

大马强 发表于 2022-1-9 11:07
有无输入样式
是输入4 输出 001 吗?

输入4 转换
00000000 00000000 00000000 00000100

傻眼貓咪 发表于 2022-1-9 11:57:02

#include <stdio.h>

int main()
{
    unsigned a;
    unsigned num = {0};
    scanf("%u", &a);
    for(int i = 31; a; i--){
      num = a%2;
      a >>= 1;
    }
    printf("0b");
    for(int i = 0, flag = 0; i < 32; i++){
      if(num) flag = 1;
      if(flag) printf("%u", num);
    }
    return 0;
}14
0b1110

BlackWhite_idea 发表于 2022-1-9 12:32:19

傻眼貓咪 发表于 2022-1-9 11:57


这个我还要做成二进制倒序。。

傻眼貓咪 发表于 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 = {0};
    scanf("%u", &a);
    for(int i = 0; a; i++){
      num = a%2;
      a >>= 1;
    }
    for(int i = 31; i > -1; i--){
      printf("%u", num);
    }
    return 0;
}14
00000000000000000000000000001110

傻眼貓咪 发表于 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(二进制)啊,只是前面的零照常输出而已?

人造人 发表于 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;
}
页: [1]
查看完整版本: 我这里为什么输不出结果