多倍長整数クラス add sub 命令

足し算と引き算のも作ってみました。
インラインアセンブラだと CF(キャリーフラグ) を取得する方法がすぐには見つからなかった。(尚、ジャンプ命令は使いたくないので jz などの命令は却下)

非常に無駄が多いコードになってしまいましたが、足し算引き算は使う事を想定していないので、とりあえず以下のコードで作り進めます。

Plate& Plate::operator+=(const Plate& p) {
	unsigned long long b0, b1, b2;
	b0 = bits[0];
	b1 = bits[1];
	b2 = bits[2];
	
	b0 += p.bits[0];
	b1 += p.bits[1];
	b2 += p.bits[2];
	
	b1 += (b0 >> 16 >> 16);
	b2 += (b1 >> 16 >> 16);
	
	bits[0] = (unsigned long)b0;
	bits[1] = (unsigned long)b1;
	bits[2] = (unsigned long)b2;
	return *this;
}
Plate& Plate::operator-=(const Plate& p) {
	unsigned long long b0, b1, b2;
	b0 = bits[0];
	b1 = bits[1];
	b2 = bits[2];
	
	b0 -= p.bits[0];
	b1 -= p.bits[1];
	b2 -= p.bits[2];
	
	b1 -= ((b0 >> 16 >> 16) & 1);
	b2 -= ((b1 >> 16 >> 16) & 1);
	
	bits[0] = (unsigned long)b0;
	bits[1] = (unsigned long)b1;
	bits[2] = (unsigned long)b2;
	return *this;
}