签署我一直在考虑这个问题,想解决它在C:添加32位用C
假设你有一个32位处理器和C编译器不支持长很长(或长整型)。写一个函数add(a,b),它返回c = a + b,其中a和b是32位整数。
我写了这个代码能够检测溢和下溢
#define INT_MIN (-2147483647 - 1) /* minimum (signed) int value */
#define INT_MAX 2147483647 /* maximum (signed) int value */
int add(int a, int b)
{
if (a > 0 && b > INT_MAX - a)
{
/* handle overflow */
printf("Handle over flow\n");
}
else if (a < 0 && b < INT_MIN - a)
{
/* handle underflow */
printf("Handle under flow\n");
}
return a + b;
}
我不知道如何实现长期使用32个寄存器,这样我可以正常打印的价值。有人可以帮助我如何使用下溢和溢出信息,以便我可以将结果正确地存储在c变量中,我认为应该是2个32位位置。我想这就是问题所在,当它暗示那么长时间不被支持时。变量c是否将2 32位寄存器放在一起以保持正确的结果,以便可以打印?当结果过度或不足时,我应该做什么样的行动?
请注意您的问题在写入时的样子。将代码标记为代码,使其看起来合理。我现在已经修复了它,但请注意它。 –
你所要求的一切都完全是特定于实现的。 –
'INT_MAX'宏已经存在于'limits.h'中,你自己不需要这样做。只需包含标题。 – ameyCU