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

标签 c binary integer

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

#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]);


}

为什么会出现这个问题,如何解决?

谢谢!

最佳答案

C 的 log 函数给出的结果以 e 为底,而不是 2。这就是为什么有些数字在您的程序中给出意想不到的结果,因为您使用它进行计算。有一个函数 log2我认为这就是您需要的。

关于c - 某些输入的整数到二进制转换程序失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50823034/

相关文章:

c - 我怎么知道这个案子是否属实?

binary - 如何理解vtk二进制文件格式的base64编码

c - scanf() 表达式被跳过

c - 链表插入导致 sysmalloc 断言错误

c - 关于暂定定义

java - 不包含 00 的二进制序列的正则表达式

c - 整数与其负数按位或的目的

java - 为什么 Java 编译器不喜欢原始 int 作为 HashMap 中值的类型?

java - 从 args 打印出一组整数,输出为 : The numbers are 1, 2, 3, 4, 5

c - 从 C 中的 char* 数组中删除空格