不能通过携带来传播价值

制作一个小的C ++大型精度类,一切似乎工作得体,但添加,如果我一起添加0xffffffff和0x04我得到0xffff0003当我应该得到0x0100000003。这是问题的功能:


mpfl operator+(const mpfl &lhs, const mpfl &rhs)

{

    unsigned long i;

    mpfl ret(0);

    mpfl trhs(rhs);

    for (i = lhs.nbytes; i >= 0; i--)

    {

        if (

            (unsigned short)lhs.data[i].data + (unsigned short)trhs.data[i].data

            > (unsigned short)255

        ) {

            if (i > 0)

            {

                ret.data[i].carry = 1;

                ret.data[0].carry = 0;

            }

            else

            {

                ret.data[0].carry = 1;

            }

        }

        else

            ret.data[i].carry = 0;

        ret.data[i].data = lhs.data[i].data + trhs.data[i].data;

        if (i < lhs.nbytes)

        {

            if (ret.data[i].data == 255 && ret.data[i + 1].carry == 1)

                increment(&trhs, i + 1);

            ret.data[i].data += ret.data[i + 1].carry;

        }

        if (i == 0) break;

    }

    return ret;

}

这里是完整源代码的链接(github使这更容易,因为它有很多)


标题:https://github.com/phyrrus9/mpfl/blob/master/mpfl.h

class:https://github.com/phyrrus9/mpfl/blob/master/mpfl.cpp

驱动程序:https://github.com/phyrrus9/mpfl/blob/master/main.cpp


梵蒂冈之花
浏览 674回答 3
3回答

小唯快跑啊

对于更大的整数只需将31位移位更改为(n-1),其中n是使用数据类型的位数,并且对于inc更改最大值...(抱歉,我认为这很明显)

慕莱坞森

我会做cy测定add/&nbsp;adc更像是一个中sub/&nbsp;sbc:cy = c < b ? 1 : 0和cy = (cy ? c<=b : c < b) ? 1 : 0。
打开App,查看更多内容
随时随地看视频慕课网APP