gpt4 book ai didi

创建一个大整型

转载 作者:行者123 更新时间:2023-11-30 18:43:06 26 4
gpt4 key购买 nike

我正在尝试将位移位实现为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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com