我打算创建一个数字课程。目的是保留任意数量的数字,而不必担心过多(如使用int或long)。但同时没有太多使用。例如:
如果我的数据只需要1-10,我不需要int(4个字节),short(2个字节)或者char(1个字节)。那么为什么分配这么多? 如果我想要保存需要极大数量的数据(在这种情况下只有整数),就像过去数十亿,我不能。 我的目标是创建一个数字类,可以像字符串一样处理这个问题,调整大小以适应数字。但在我开始之前,我想知道......
unsigned char,或者BYTE保存8个字节,0到256之间只需要一个,更多需要2个,然后是3个,它只需要在字节间隔而不是位间隔时继续扩展。
你觉得哪个更有效率?如果bitset实际分配了1位,那么这些位会让我觉得它甚至不可能。实际上,在32位处理器上分配字节直到4字节(32位)实际上更有效32位分配是最有效的,因此从那时起我将一次使用4个字节。
基本上我的问题是,你有什么想法?我该怎么做这个实现,bitset< 1>或unsigned char(或BYTE)?
答案 0 :(得分:2)
如果要将其作为十进制数存储,请使用unsigned char。这将是最有效的。
或者,您可以使用GMP。
答案 1 :(得分:1)
bitset模板的模板参数需要编译时的const整数。当您必须在运行时确定最大位大小时,这可能是一个缺点。另一件事是大多数编译器/库使用unsigned int
或unsigned long long
来存储这些位以便更快地访问内存。如果您的应用程序将在内存有限的环境中运行,您应该创建一个新的类,如bitset或使用不同的库。
答案 2 :(得分:1)
虽然它无法直接帮助您对巨型数字进行算术运算,但如果这种节省空间是您的目标,那么您可能会发现我的Nstate库很有用(增强许可证):
http://hostilefork.com/nstate/
例如:如果你有一个介于0和2之间的值...那么只要你将一堆这些存储在一个数组中,就可以利用未使用的第四个“浪费”的空间state(3)包含更多值。在这种特殊情况下,你可以在一个32位字中得到20个三态,而不是每个三态2位得到的16个。