uint64_t c = (uint64_t)blocks[0]+i32u;


이 casting 말하는거였어? 그럼 그냥 덧셈(및 다른 연산) 자리올림 처리용이지.


    void add(uint32_t i32u)

    {

        if (i32u == 0)

            return;

        if ( length != 0 )

        {

            uint64_t c = (uint64_t)blocks[0]+i32u;

            blocks[0] = (uint32_t)c;

            if ( c >> _carry )

                carry(1);

        }

        else

        {

            allocate(1);

            sign = +1;

            blocks[0] = i32u;

        }

    }


여기서 if ( c >> _carry ) 는 좀 불합리한 것 같아.


a + b = r 에서 carry 가 발생하고 r 의 상위 값이 잘려나갔다면,

항상 r < a, r < b 이 참 아니냐?