首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请高手给解题思路,高分结帖!该怎么解决

2012-03-02 
请高手给解题思路,高分结帖!问题如下:定义一结构体://64位整型数用高32位和低32位表示,采用2^32进制计算st

请高手给解题思路,高分结帖!
问题如下:
定义一结构体:
//64位整型数用高32位和低32位表示,采用2^32进制计算
struct   sint64
{
        int   high;
        unsigned   int   low;
};

      上述计算为有符号计算,当存在负数时,如何计算其补码?比如:
sint64   opr1;
sint64   opr2;

opr1.high=-21   4748   3648;
opr1.low   =   4294   9672   95;
opr2.high=21   4748   3647;
opr2.low=21   4748   3647;

要计算opr1+opr2
现在:opr1为负数,那么应该先求出opr1的补码,然后再计算(opr1)补+opr2,这里opr1的补码怎么计算?具体一点就是:如何处理opr1.high与opr1.low的关系,请高手指点,急等,谢谢!



[解决办法]
不太明白楼主的意思,按反码形式直接加不久可以了吗,比如

sint64 opr1;
sint64 opr2;
sint64 sum; // sum

opr1.high = 0xffffffff;
opr1.low = 0xffffffff; // 按补码法则opr1为-1
opr2.high=0x0;
opr2.low=2; // opr2为2

sum.low = opr1.low + opr2.low;
sum.high = opr1.high + opr2.high; //直接加

if (res.low < opr1.low || res.low < opr2.low) //如果低位溢出,表示有进位,高位再加1
res.high++;
[解决办法]
楼上的请教下:
if (res.low < opr1.low || res.low < opr2.low)
能详细解释下不
我来学习的
[解决办法]
课本理论知识要求比较熟悉。


补码的概念
加减位移运算等
[解决办法]
学习
[解决办法]
楼上的请教下:
if (res.low < opr1.low || res.low < opr2.low)
----------------------------------------------
先修正笔误,是if (sum.low < opr1.low || sum.low < opr2.low)

因为low的定义是unsigned int,无符号加,如果没有溢出,那么sum.low肯定 > opr1.low 和 opr2.low,但是如果溢出了,比如opr1.low = 0xffffffff,opr2.low = 0x1,那么sum.low就溢出了,而在lz的题意中,这正好就是进位,所以,sum.high 还要加1;否则不用加

热点排行