c - 二进制大数

标签 c binary numbers int uint64

我必须在参数中取一个 80 位的整数,将其转换为二进制,然后对其进行一些移位操作。我使用这个片段(似乎工作正常)来存储参数:

uint64_t n;
seed= strtol(argv[1], &p, 10);
printf("n:%" PRIu64 "\n", n);

然后,我想用这个函数把它转换成二进制:

uint64_t decimal_binary(uint64_t n)
{
    uint64_t rem, i=1;
    uint64_t binary=0;
    while (n!=0)
    {
        rem=n%2;
        n/=2;
        binary+=rem*i;
        i*=10;
    }
    return binary;
}

然后:

printf("n:%" PRIu64 "\n", n); /* works fine, even for n >= 1048576 */
printf("n:%" PRIu64 "\n", decimal_binary(n)); /* works only for n <= 1048575 */

我需要使用位移运算符,所以我需要一个可以与 << 一起使用的解决方案.

最佳答案

8 字节整数不足以存储 80 位数字的二进制格式。请考虑使用字符数组。

例如,如果数字是 3,则它的二进制格式是 11(2 位数字)。如果数字是 255,则二进制数是 11111111(8 位)。所以我认为当数字大于1048575时,你必须使用21位以上的数字来存储它。它大于 8 个字节的最大值。

关于c - 二进制大数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33941715/

相关文章:

c - Linux 驱动程序 try & catch

json - 使用 jq 将数字字节值数组转换为字符串

java - 在 while 循环中检查输入是否为数字

java - Java中是否有默认的数字类型

c - "int i = x++, j = x++;"合法吗?

c - 用函数初始化c中动态分配的二维数组

c - 缓冲区清除 - 输出不符合预期

c - C中的二元运算

c++ - 字符串流和二进制数据

c - 在c中获取 float 的指数