繁体   English   中英

我创建了一个将二进制转换为十进制的代码,但不能使用超过10位

[英]I've created a code to convert binary to decimal, but doesn't work with more than 10 bits

我创建了一个小代码,将二进制数转换为十进制数。 当我输入二进制数直到10位时,结果是正确的;但是当我增加10位以上时,结果将是错误的。

我使用的算法如下

1   1   0  0  1  0
32  16  8  4  2  1 x
------------------
32+ 16+ 0+ 0+ 2+ 0

编码:

unsigned long binary, i=0, j=0, result=0, base=1;
unsigned char *binaryStandalone = (unsigned char *)malloc(16);
memset(binaryStandalone, 0, 16);

printf("Enter a binary number: ");
scanf("%u", &binary);


while(binary > 0){
   binaryStandalone[i] = binary % 10;
   binary = binary / 10;
   i++;
}

for(j=0;j<i;j++){
   result +=  (binaryStandalone[j] * 1 << j);
   printf("%u = %u\n", j, base << j);
}
printf("The decimal number is: %u\n", result);

free(binaryStandalone);

现在我想知道, 当二进制数增加超过10位时,代码没有给我正确的结果是什么原因?

看来您的平台将32位用于long int ,因此您的binary变量最多可以容纳2^32 - 1 = 4294967295 ,该值足以容纳10位数字,但不能容纳11位数字。

您可以改用unsigned long long (64位足以表示20位数字),也可以将输入读取为字符串。

您存储在无符号长范围为0到4,294,967,295->仅10个数字的数字中

因为您用于存储“二进制”值的long值没有更多的十进制数字。 您可能想使用字符串类型作为输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM