c - 某些输入的整数到二进制转换程序失败
问题描述
我编写了用于获取整数的二进制形式的代码。它适用于像 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]);
}
为什么会出现问题以及如何解决?
谢谢!
解决方案
C 的 log 函数给出的结果以 e 为底,而不是 2。这就是为什么有些数字会在你的程序中给出意想不到的结果,因为你使用它进行计算。我认为有一个函数log2是你需要的。
推荐阅读
- android - 前台服务和唤醒锁在华为设备上不起作用
- iis - 防止热链接不起作用 IIS 10 - Windows server 2016
- kdb - 保存到 csv 时 kdb+ 日期格式发生变化
- linux - 将脚本制作为后台进程
- java - IgniteJdbcThinDrive 无法启动打开 jdk 11
- r - 如何在ggplot曲线中添加数据点?
- javascript - 向下滚动并且地址栏(Chrome和Safari)向下滑动后,有什么方法可以保持100vh?
- python - 我不能在 cv2.imshow() 中检查图像数组的整个或特定像素值吗?
- google-apps-script - 如何让我的代码插入光标处,而不是自动附加到文档末尾
- azure - Azure 数据工厂 - 数据流