让我们有
int a, b, c; // may be char or float, anything actually
c = a + b;
让int类型用4个字节表示。假设 a+b 需要比 4 个字节多 1 位(即,假设结果是 1 00....0(32 个零,二进制))。这将导致 C=0,并且我确信计算机的微处理器会设置某种溢出标志。 C 中有没有内置方法可以检查这一点?
我实际上正在构建一个 1024 位长的数字类型(例如,int 是一个 32 位长的内置数字类型)。我尝试使用具有 128 个元素的无符号字符类型数组。我还需要定义这些数字的加法和减法运算。我已经编写了加法代码,但我在减法方面遇到了问题。我不需要担心得到负结果,因为我调用减法函数的方式始终确保减法结果始终为正,但要实现减法函数,我需要以某种方式获得减数的 2 补码,这这是我自定义的 1024 位数字吗?
如果我的描述难以理解,我很抱歉。如果需要的话我会详细说明。我包含了加法函数和不完整减法函数的代码。这NUM_OF_WORDS
是一个常量,声明为
#define NUM_OF_WORDS 128
如果您不理解我的问题或我的代码的任何部分,请告诉我。
PS:我不知道如何在此论坛中上传附件,因此我将引导您到另一个网站。我的代码可能在那里找到
点击本页的下载 http://www.murga-linux.com/puppy/viewtopic.php?t=66710
顺便说一句,我发现this http://c-faq.com/misc/intovf.html我打算更换INT_MAX by UCHAR_MAX
因为我的 1024 位数字由 char 类型数组(8 位变量)组成
这项检查是否足以应对所有情况?
Update:
是的,我正在研究密码学。
我需要为 1024 位整数实现蒙哥马利乘法例程。
我也考虑过使用 GMP 库,但不知道如何使用它。
我查阅了教程,经过一些小的修改后,我能够在 VC++ 6 中构建 GMP 项目文件,这会产生很多 .obj 文件,但现在我不知道如何处理它们。
如果我可以编写自己的数据类型,那就太好了,因为它将让我完全控制自定义数据类型上的算术运算的工作方式,并且我还需要能够将其从 1024 位扩展到更大的数字未来。