forked from QuasarApp/QtBigInt
fix
This commit is contained in:
parent
294966335c
commit
e55e6a2d2c
@ -67,7 +67,7 @@ BigInt operator +(BigInt left, int right) {
|
||||
return left + static_cast<unsigned int>(right);
|
||||
}
|
||||
|
||||
return left - right;
|
||||
return left - static_cast<unsigned int>(std::abs(right));
|
||||
}
|
||||
|
||||
BigInt operator +(BigInt left, const BigInt &right) {
|
||||
@ -84,7 +84,7 @@ BigInt& operator +=(BigInt &left, int right) {
|
||||
if (right >= 0) {
|
||||
return left += static_cast<unsigned int>(right);
|
||||
}
|
||||
return left -= right;
|
||||
return left -= static_cast<unsigned int>(std::abs(right));
|
||||
}
|
||||
|
||||
BigInt& operator +=(BigInt &left, const BigInt &right) {
|
||||
@ -113,16 +113,22 @@ BigInt operator -(BigInt left, int right) {
|
||||
if (right >= 0) {
|
||||
return left - static_cast<unsigned int>(right);
|
||||
}
|
||||
return left + right;
|
||||
return left + static_cast<unsigned int>(std::abs(right));
|
||||
}
|
||||
|
||||
BigInt operator -(int left, BigInt right) {
|
||||
if (right >= 0) {
|
||||
return static_cast<unsigned int>(left) - right;
|
||||
}
|
||||
return right + left;
|
||||
return right + static_cast<unsigned int>(std::abs(left));
|
||||
}
|
||||
|
||||
BigInt operator-(BigInt val) {
|
||||
mpz_neg(val.data, val.data);
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
BigInt& operator -=(BigInt &left, const BigInt &right) {
|
||||
mpz_sub(left.data, left.data, right.data);
|
||||
return left;
|
||||
@ -137,7 +143,7 @@ BigInt& operator -=(BigInt &left, int right) {
|
||||
if (right >= 0) {
|
||||
return left -= static_cast<unsigned int>(right);
|
||||
}
|
||||
return left += right;
|
||||
return left += static_cast<unsigned int>(std::abs(right));
|
||||
}
|
||||
|
||||
BigInt& operator -=(int left, BigInt & right) {
|
||||
@ -145,7 +151,7 @@ BigInt& operator -=(int left, BigInt & right) {
|
||||
return static_cast<unsigned int>(left) -= right;
|
||||
}
|
||||
|
||||
return right = right + left;
|
||||
return right = right + static_cast<unsigned int>(std::abs(left));
|
||||
}
|
||||
|
||||
BigInt& operator -=(unsigned int left, BigInt & right) {
|
||||
@ -168,7 +174,7 @@ BigInt operator /(BigInt left, int right) {
|
||||
if (right >= 0) {
|
||||
return left / static_cast<unsigned int>(right);
|
||||
}
|
||||
return 0 - (left / static_cast<unsigned int>(right));
|
||||
return 0 - (left / static_cast<unsigned int>(std::abs(right)));
|
||||
}
|
||||
|
||||
BigInt& operator /=(BigInt &left, const BigInt &right) {
|
||||
@ -185,7 +191,7 @@ BigInt& operator /=(BigInt &left, int right) {
|
||||
if (right >= 0) {
|
||||
return left /= static_cast<unsigned int>(right);
|
||||
}
|
||||
return 0 -= (left /= static_cast<unsigned int>(right));
|
||||
return 0 -= (left /= static_cast<unsigned int>(std::abs(right)));
|
||||
}
|
||||
|
||||
// mul operators
|
||||
@ -201,7 +207,7 @@ BigInt operator *(BigInt left, int right) {
|
||||
if (right >= 0) {
|
||||
return left * static_cast<unsigned int>(right);
|
||||
}
|
||||
return 0 - (left * static_cast<unsigned int>(right));
|
||||
return 0 - (left * static_cast<unsigned int>(std::abs(right)));
|
||||
}
|
||||
|
||||
BigInt operator *(BigInt left, unsigned int right) {
|
||||
@ -218,7 +224,7 @@ BigInt& operator *=(BigInt &left, int right) {
|
||||
if (right >= 0) {
|
||||
return left *= static_cast<unsigned int>(right);
|
||||
}
|
||||
return 0 -= (left *= static_cast<unsigned int>(right));
|
||||
return 0 -= (left *= static_cast<unsigned int>(std::abs(right)));
|
||||
}
|
||||
|
||||
BigInt& operator *=(BigInt &left, unsigned int right) {
|
||||
@ -262,6 +268,8 @@ BigInt& operator %=(BigInt& left, int right) {
|
||||
throw " mod with negativ value not sopported";
|
||||
}
|
||||
|
||||
|
||||
// incriment and dicriment
|
||||
BigInt &BigInt::operator--() {
|
||||
*this -= 1;
|
||||
return *this;
|
||||
@ -312,7 +320,7 @@ BigInt operator >>(BigInt left, int right) {
|
||||
return left >> static_cast<unsigned int> (right);
|
||||
}
|
||||
|
||||
return left << right;
|
||||
return left << static_cast<unsigned int>(std::abs(right));
|
||||
}
|
||||
|
||||
BigInt operator <<(BigInt left, int right) {
|
||||
@ -320,7 +328,7 @@ BigInt operator <<(BigInt left, int right) {
|
||||
return left << static_cast<unsigned int> (right);
|
||||
}
|
||||
|
||||
return left >> right;
|
||||
return left >> static_cast<unsigned int>(std::abs(right));
|
||||
}
|
||||
|
||||
BigInt& operator >>=(BigInt &left, int right) {
|
||||
@ -328,7 +336,7 @@ BigInt& operator >>=(BigInt &left, int right) {
|
||||
return left >>= static_cast<unsigned int>(right);
|
||||
}
|
||||
|
||||
return left <<= right;
|
||||
return left <<= static_cast<unsigned int>(std::abs(right));
|
||||
}
|
||||
|
||||
BigInt& operator <<=(BigInt &left, int right) {
|
||||
@ -336,7 +344,7 @@ BigInt& operator <<=(BigInt &left, int right) {
|
||||
return left <<= static_cast<unsigned int>(right);
|
||||
}
|
||||
|
||||
return left >>= right;
|
||||
return left >>= static_cast<unsigned int>(std::abs(right));
|
||||
}
|
||||
|
||||
// other bin operators
|
||||
|
@ -47,6 +47,7 @@ public:
|
||||
friend BigInt operator - ( BigInt left, unsigned int right);
|
||||
friend BigInt operator - ( BigInt left, int right);
|
||||
friend BigInt operator - ( int right, BigInt left);
|
||||
friend BigInt operator-(BigInt val);
|
||||
|
||||
friend BigInt& operator -= ( BigInt &left, unsigned int right);
|
||||
friend BigInt& operator -= ( BigInt &left, int right);
|
||||
|
Loading…
x
Reference in New Issue
Block a user