我正在尝试将位移位实现为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
的结果)。
假设novo
和new
是相同的变量,并且该帖子仅翻译了一次出现,
诺沃=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/