将二进制数从 short 类型转换为 C 中的十进制数
Convert a binary number from type short into a decimal number in C
我需要从一个文件中读取一个用 C 语言中 short 类型表示的二进制数。
这个数字代表数组的大小,所以我读完之后想把这个数字作为十进制值使用。
我试图将二进制数转换为十进制数,但我得到了错误的值。
例如:如果文件中的二进制数是 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。
有解决这个问题的想法吗?我在这里错过了什么?
谢谢
这个例子如你所愿。
#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;
}
我需要从一个文件中读取一个用 C 语言中 short 类型表示的二进制数。
这个数字代表数组的大小,所以我读完之后想把这个数字作为十进制值使用。
我试图将二进制数转换为十进制数,但我得到了错误的值。
例如:如果文件中的二进制数是 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。
有解决这个问题的想法吗?我在这里错过了什么?
谢谢
这个例子如你所愿。
#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;
}