我这里为什么输不出结果
#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);
}
为什么我的运行后不行。。。不输出结果 #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);
} 我有个小技巧,对于编写大量代码,或循环语句等,最终结果不如预期,可以用这个技巧(相信很多人都和我一样吧,哈哈哈)
试试在想检查代码的地方,打印参数出来,就可以清楚知道编译器运行到此处参数变成什么了,有没有错。 有无输入样式
是输入4 输出 001 吗? 大马强 发表于 2022-1-9 11:07
有无输入样式
是输入4 输出 001 吗?
输入4 转换
00000000 00000000 00000000 00000100 #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 傻眼貓咪 发表于 2022-1-9 11:57
这个我还要做成二进制倒序。。 本帖最后由 傻眼貓咪 于 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 BlackWhite_idea 发表于 2022-1-9 11:54
输入4 转换
00000000 00000000 00000000 00000100
输入4 转换
00000000 00000000 00000000 00000100
**这不是倒序啊,4 确实是 100(二进制)啊,只是前面的零照常输出而已? #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]