某些输入的二进制转换程序的整数失败

时间:2018-06-12 17:51:58

标签: c binary integer

我编写了获取整数二进制形式的代码。它适用于像1或10这样的输入。但是,对于像256这样的输入它是失败的。(它给出0000000的输出并且错过了一个)。

#include <stdio.h>
#include <math.h>

int number_of_binary_digits_required(int n){

return ceil(log(n))+1;

}

void print_array(int * a, int n){

    int i = 0;
    for (;i<n;i++){
        printf("%d\t", a[i]);
    }

}


int main(){

int num = 256;
int binary[100];
int n = number_of_binary_digits_required(num);
int bin_digits = n-1;

while (num){

   int temp = num%2;
   num = num / 2;
   binary[bin_digits] = temp;
   //printf("%d\n", bin_digits);
   bin_digits--;

}

print_array(binary, n);

//printf("%d", number_of_binary_digits_required(num));
//for(bin_digits = 0;bin_digits < number_of_binary_digits_required(num);bin_digits++)
//printf("%d",binary[bin_digits]);


}

为什么会出现问题以及如何解决?

谢谢!

3 个答案:

答案 0 :(得分:2)

C的日志功能以e为基数给出结果,而不是2.这就是为什么有些数字在你的程序中给出了意想不到的结果,因为你使用它来计算。我认为有一个函数log2

答案 1 :(得分:1)

使用对数函数来计算与ceil一起计算的位数会因浮点下冲而受到影响。

计算二进制数字的更可靠方法是重复除以2直到达到零。

答案 2 :(得分:0)

第一个错误是使用log(n),它计算n base e的log。

而是使用log2(n)

希望它有所帮助。 : - )