【发布时间】:2017-07-20 15:13:16
【问题描述】:
我现在正在做一个项目,我需要对以 256 为底的数字进行计算。我正在读取文件的字节并将其存储在 uint8_t 的数组中(又名 unsigned char 或 BYTE) .支持的最大数字数据类型不能满足我项目的需要。因此,字节数组的作用类似于自定义长度/大小数据类型 (BigInt)。
我现在需要对其进行算术运算,例如:-1, /2, %2。
例如,这是演示我的数字应该如何工作的加法的样子:
9 + 1 = (10)
99 + 1 = (100)
255 + 1 = (1)+(0)<<8
255 + 2 = (1)+(1)<<8
注意:第一个是 10,因为 10 占 1 位,而第三个是 1 0,因为它占 2 位。我也无法将它们转换为整数,因为我必须处理 huge 数字。
我绞尽脑汁想办法在 C 中实现这一点,但无济于事。
到目前为止我的代码:
#include<stdio.h>
#include<string.h>
#include<stdint.h>
#include<stdlib.h>
typedef uint8_t BYTE;
BYTE buffer[1000000000];
void n(){
printf("\n");
}
int main()
{
uint32_t x;
x = 0;
int _len,y;
char * test = "test.bin";
FILE * inptr = fopen(test,"rb");
uint32_t i=0;
while(fread(&buffer[i],1,1,inptr));
}
【问题讨论】:
-
我不明白,你的问题是什么。您可以确定我们了解非 10 个碱基的算术是如何工作的。您没有显示任何代码。问你什么时候准备好。
-
参见 Cant make value propagate through carry ,而不是
DWORD更改为BYTE并相应地更新位掩码和移位 -
将您的数组视为多项式(x == 256)。然后,您可以应用与多项式算术相同的算法。仅:您需要考虑溢出!
-
@DavideSpataro @EugeneSh。考虑
(9)+(1) = (10)、(255) + (2) = (1)(1),所以你的 256 位数字是放在括号中的值 0-255... -
我猜是因为没有在问题中展示您的任何工作并且没有明确说明问题所在。
标签: c algorithm math biginteger