我需要从一个文件中读取一个二进制数字,该二进制数字由C语言中的短类型表示。
数字表示数组的大小,因此在读取数组后,我希望将该数字用作十进制值。
我试图将二进制数转换成十进制,但得到了错误的值。
例如:如果文件中的二进制数是0000000000000101,那么小数点的大小应该是5,但是当我使用“经典”二进制到十进制时,就得到了17的值。
“经典”功能:
void main()
{
int num, binary_val, decimal_val = 0, base = 1, rem;
printf("Enter a binary number(1s and 0s) \n");
scanf("%d", &num);
binary_val = num;
while (num > 0)
{
rem = num % 10;
decimal_val = decimal_val + rem * base;
num = num / 10 ;
base = base * 2;
}
printf("The Binary number is = %d \n", binary_val);
printf("Its decimal equivalent is = %d \n", decimal_val);
}当我只输入最后3个数字(101个)时,我得到了值5,但当我输入完整的数字(0000000000000101)时,我得到了17。
有什么办法解决这个问题吗?我在这里错过了什么?
谢谢
发布于 2021-05-26 13:43:04
这个例子可以像你想的那样工作。
#include <math.h>
#include <stdio.h>
int convert(long long n);
int main() {
long long n;
printf("Enter a binary number: ");
scanf("%lld", &n);
printf("%lld in binary = %d in decimal", n, convert(n));
return 0;
}
int convert(long long n) {
int dec = 0, i = 0, rem;
while (n != 0) {
rem = n % 10;
n /= 10;
dec += rem * pow(2, i);
++i;
}
return dec;
}https://stackoverflow.com/questions/67706154
复制相似问题