首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我已经创建了一个代码来将二进制转换为十进制,但是不工作超过10位

我已经创建了一个代码来将二进制转换为十进制,但是不工作超过10位
EN

Stack Overflow用户
提问于 2013-11-17 21:45:33
回答 3查看 158关注 0票数 0

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

我使用的算法如下

代码语言:javascript
复制
1   1   0  0  1  0
32  16  8  4  2  1 x
------------------
32+ 16+ 0+ 0+ 2+ 0

代码:

代码语言:javascript
复制
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位时,代码没有给出正确结果的原因是什么?

EN

回答 3

Stack Overflow用户

发布于 2013-11-17 21:51:39

您的平台似乎对long int使用了32位,因此binary变量最多可以容纳10位数的值2^32 - 1 = 4294967295,但不能容纳11位数字。

您可以使用unsigned long long (64位足以容纳20位数字),也可以将输入读入为字符串。

票数 2
EN

Stack Overflow用户

发布于 2013-11-17 21:51:51

您存储在一个无符号长,其范围从0到4,294,967,295 ->只有10个数字

票数 2
EN

Stack Overflow用户

发布于 2013-11-17 21:52:23

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20036573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档