【发布时间】:2022-11-01 11:19:54
【问题描述】:
例如,如果我输入 12,我想得到 81 41,因为 12 中的设置位是 1100
这就是我现在所拥有的,我认为我没有正确实现 for 循环
#include <stdio.h>
void bin(unsigned n)
{
char list[6];
int x = 0, y = 1;
/* step 1 */
if (n > 1)
bin(n / 2);
/* step 2 */
list[x] = n % 2;
x++;
/*for(int i = 0; i < x; i++) {
printf("%d\n",list[i]);
}*/
for(int i = 0; i < 5; i++) {
if(list[i] == 1 && i == 5) {
printf("32%i",y);
}
if(list[i] == 1 && i == 4) {
printf("16%i",y);
}
if(list[i] == 1 && i == 3) {
printf("8%i",y);
}
if(list[i] == 1 && i == 2) {
printf("4%i",y);
}
if(list[i] == 1 && i == 1) {
printf("2%i",y);
}
if(list[i] == 1 && i == 0) {
printf("1%i",y);
}
}
}
我检查了我是否正确地将字节存储在数组中,并且输出正确,但是当我尝试在循环中一次查找一个字节时,它似乎卡在 32 位整数上,所以对于 12,它将打印 321 321
【问题讨论】:
-
您确定将
list[i] = 1作为条件吗?你的编译器没有抱怨吗?由于operator precedencelist[i] = 1 && i == 5实际上是list[i] = (1 && i == 5)这不太可能是你想要的。 -
我修好了...现在,例如,当我输入 12 时,我得到 11 11。似乎它没有解决问题
-
我建议您使用debugger 逐行执行代码,同时监控变量及其值。
标签: c loops printing binary binary-search