十进制到二进制转换 - 我需要帮助

时间:2011-06-21 13:26:34

标签: c binary

  

可能重复:
  Decimal to Binary conversion

我需要使用C编程将20位十进制转换为二进制。我该怎么做呢真的,我觉得很难。我将创建什么缓冲区,因为它会非常大,即使计算器也无法计算将20位数转换为二进制数。

我需要建议,链接和可能的示例代码。

感谢。

3 个答案:

答案 0 :(得分:1)

您是否需要将十进制字符串转换为二进制字符串或值?

经验法则10 ^ 3~ = 2 ^ 10,因此10 ^ 20~ = 2 ^ 70> 64位(67准确)。

==> 64位整数是不够的。你可以使用2个64位整数(长C)或者上部8位字节和下部64位结构。 确保下半部分未签名。

您需要编写检查下部溢出的代码,并在发生这种情况时增加上部。一旦越过64位线,您还需要使用长除法算法。

答案 1 :(得分:1)

使用库进行扩展精度算术怎么样?试着看看http://gmplib.org/

答案 2 :(得分:0)

我不知道你是不是想把一串数字字符转换成一个非常大的int,或者把一个非常大的int转换成一个1s和0s的字符串......但总的来说,你会做一些事情像这样:

for (i = 0; i < digits; i++)
{
    bit[i] = (big_number>>i) & 1;
    // or, for the other way around
    // big_number |= (bit[i] << i);
}

主要问题是没有可以存储“big_number”的内置类型。所以你可能会更喜欢这样做......

uint8_t big_number[10]; // the big number is stored in 10 bytes.
// (uint8_t is just "unsigned char")
for (block = 0; block < 10; block++)
{
    for (i = 0; i < 8; i++)
    {
        bit[block*8 + i] = (big_number[block]>>i) & 1;
    }
}

[编辑]

要将一串数字字符读入int(不使用scanfatoi等),我会这样做:

// Supposing I have something like char token[]="23563344324467434533";
int n = strlen(token); // number of digits.
big_number = 0;
for (int i = 0; i < n; i++)
{
    big_number += (token[i] - '0') * pow(10, n-i-1);
}

这将有助于读取数字,但同样,问题是没有内置类型来存储big_number。你可以使用一个浮点数或一个双精度数,这样可以得到数字的大小正确,但最后几位小数将被四舍五入。如果您需要完美的精度,则必须使用任意精度整数。谷歌搜索出现了几个可能的库用于此;但我对这些图书馆没有太多的个人经验,所以我不会提出建议。

但实际上,您使用的数据类型取决于您之后要对数据执行的操作。也许你需要一个任意精度的整数,或者double可能正是你所需要的;或者你可以使用我在uint8_t块中概述的技术编写你自己的基本数据类型,或者你最好把它留作字符串!