我编写了获取整数二进制形式的代码。它适用于像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]);
}
为什么会出现问题以及如何解决?
谢谢!
答案 0 :(得分:2)
C的日志功能以e为基数给出结果,而不是2.这就是为什么有些数字在你的程序中给出了意想不到的结果,因为你使用它来计算。我认为有一个函数log2。
答案 1 :(得分:1)
使用对数函数来计算与ceil一起计算的位数会因浮点下冲而受到影响。
计算二进制数字的更可靠方法是重复除以2直到达到零。
答案 2 :(得分:0)
第一个错误是使用log(n),它计算n base e的log。
而是使用log2(n)
希望它有所帮助。 : - )