创建一个大整型

标签 c

我正在尝试将位移位实现为bigint。 BigInt 由字节数组表示,该数组应解释为二进制补码形式的 N 位整数。所以我想做一些类似的东西:

数组 bigint 示例: {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} 将表示整数 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE (-2) N = 128 位。

typedef unsigned char *BigInt;

当我尝试创建我的 bigint 时出现错误

#include <stdlib.h>

    void bi_init (int nbits)
    {
        nbytes = (nbits/8);
    }

    BigInt bi_new (int val)
    {
        BigInt new = (BigInt)malloc(nbytes*sizeof(unsigned char));

        new=val --> problem, can someone give me a hint on how can i implement this array?

        return novo;
    }

最佳答案

typedef unsigned char *BigInt;

BigInt *new = (BigInt)malloc(nbytes*sizeof(unsigned char));

您声明new作为unsigned char** ,这一级指针太多了(您不应该在 C 中强制转换 malloc 的结果)。

假设novonew是相同的变量,并且该帖子仅翻译了一次出现,

诺沃=val

用传入的 val 覆盖刚刚分配的地址.

val 的字节填充分配的缓冲区,

int i = 0;
// make it unsigned, so that right-shifting works correctly
unsigned int u_val = val;
while(u_val) {
    new[i++] = u_val&0xFF;
    u_val >>= 8;
}

那么问题依然存在

nbytes = (nbits/8);

如果nbits,则表明您分配的内存太少不是 8 的倍数,请这样计算

nbytes = (nbits+7)/8;

关于创建一个大整型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12572051/

相关文章:

c++ - 转义 printf() 中的所有特殊字符

c - 为什么它不以从 300 到 -40 的相反顺序打印华氏度和等效摄氏度的值?

c - C 中的数组修改

c - 使用 Ulfius 实现 REST API - URI 定义

c - 如何在 Windows 上将千位分隔符添加到 C 中的 double ?

c++ - 如何对无符号长数使用宏?

c - 在 ANSI C 中,const 值是全局的?

计算 I/O 模型的值

c - Windows 和 UTF-8 字符上的 MinGW + GCC

c - 使用系统调用和打印行读取文件