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 이 참 아니냐?
왜자꾸 기어와? 털렸으면 ㄲㅈ라
응? 누가 뭐에 털렸음? 아 너 소설쓰던 걔냐?
네 글자 유동이었던가~
음 한참 만들던 중인가보군 dealloc 이 없는 부분이 많이 보이네.