请高手给解决思路!解决思路

请高手给解决思路!
问题如下:
        在嵌入式平台上经常遇到64位类型的整数不支持,在win32里是用__int64.要解决这种平台上不支持的情况,而在实际中会用到64位整数问题,只能通过两个32位整数来进行64位整数的操作.这样,这个任务就产生了.
    涉及到的64位整数的操作有:
1.   *(乘)       /(除)       %(求余)
2.   +(加)       -(减)
3.   < <(位左移)   > > (位右移)
4.   <(小于)   <=(小于等于)     > (大于)   > =(大于等于)
5.   ==(等于)     !=(不等于)
6.   &(位与)
7.   ^(位异或)
8.   |(位或)
9.   &&(逻辑与)
10.   ||(逻辑或)
11.   =     +=     -=    
        我用一结构体来定义该64位数,struct   int64{unsigned   long   high,unsigned   long   low};其中high表高32位,low表低32位,现在的问题是如何实现进位,以及如何判断溢出.比如::x.high=4294967295,x.low=4294967295;y.high=4294967295;y.low=4294967295,若要x+y,则x.low+y.low如何实现进位?若结果保存在result中,则result.low又如何确定,急请回复,谢谢!


------解决方案--------------------
就像小学生列竖式做算术一样。
RSA算法中带的大整数类,有参考价值。
------解决方案--------------------
要是C++的话 可以用重载来实现,不需要改原来的代码.
C语言就难说了,期待高手给一个方案学习学习
------解决方案--------------------
加法,楼主其他的可以参考着做.

z=x+y

z.low = x.low+y.low;
z.high = x.high+y.high+(z.low <x.low);
------解决方案--------------------
result.low=((ULONG_MAX-(ULONG_MAX-x.low+ULONG_MAX-y.low))+1)/ULONG_MAX;
------解决方案--------------------
所谓的进位其实就是溢出,
当发生溢出后,
result.low 就是溢出后剩余的部分(高位被溢出了),
那么由于溢出,result.low 会小于任何一个操作数,
所以使用 if(result.low <x.low) 判断是否发生溢出,
然后相应的分支控制 result.high= x.high+y.high; 还是 lt.high= x.high+y.high+1; 即可