// INT—64.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
struct INT_64{
unsigned long h_digit;//高32位
unsigned long l_digit;//低32位
};
long IsOverflow(unsigned long a, unsigned long b, long add_sub)
{
unsigned long r;
if (add_sub == 0)//add_sub == 0表示加法运算,否则表示减运算
{
r = a + b;
if (r < a || r < b)
{
return 1;//表示相加有溢出
}
}
else
{
r = a - b;
if (r > a)
{
return 1;//表示相减需借位
}
}
return 0;
}
INT_64 add_64(INT_64 a, INT_64 b)
{
INT_64 r;
int carry;
r.l_digit = a.l_digit + b.l_digit;
carry = IsOverflow(a.l_digit, b.l_digit, 0) ? 1 : 0;
r.h_digit = a.h_digit+ b.h_digit + carry;
return r;
}
INT_64 sub_64(INT_64 a, INT_64 b)
{
INT_64 r;
int carry;
r.l_digit = a.l_digit - b.l_digit;
carry = IsOverflow(a.l_digit, b.l_digit, 1) ? 1 : 0;
r.h_digit= a.h_digit - b.h_digit- carry;
return r;
}
int main()
{
INT_64 a, b, r;
a.h_digit= 0xEEEEEEEE;
a.l_digit= 0xFFFFFFFF;
b.h_digit= 0xFFFFFFFF;
b.l_digit = 0x0000001;
r = add_64(a, b);
printf("%08X%08X/n", r.h_digit, r.l_digit);
a.h_digit = 0x11111111;
a.l_digit = 0x00000001;
b.h_digit= 0xFFFFFFFF;
b.l_digit = 0x00000011;
r = sub_64(a, b);
printf("%08X%08X/n", r.h_digit, r.l_digit);
return 0;
}