It's giving really weird output, and I'm too frustrated to find my likely stupid mistake.Code:BigInt &BigInt::operator/=(int rhs) { unsigned int i = this->len; long long r = 0; // Check for div by 0 if(rhs == 0) return *this; // Check signs if(this->sign != (rhs < 0)) this->sign = !this->sign; // Make rhs positive if(rhs < 0) rhs = -1 * rhs; do{ i--; // Get remainder and store in high word r = (r % rhs) << sizeof(unsigned int) * 8; // Get new low word r |= this->data[i]; // Do and store division this->data[i] = r / rhs; }while(i != 0); // For later use, (r >>= sizeof(unsigned int) * 8) equals the remainder // Check for empty last block if(this->data[this->len - 1] == 0) this->resize(this->len - 1); return *this; } const int BigInt::operator%(int rhs) { unsigned int i = this->len; long long r = 0; // Check for div by 0 if(rhs == 0) return 0; // Check signs if(this->sign != (rhs < 0)) this->sign = !this->sign; // Make rhs positive if(rhs < 0) rhs = -1 * rhs; do{ i--; // Get remainder and store in high word r = (r % rhs) << sizeof(unsigned int) * 8; // Clear low word r &= ~((long long)(~((unsigned int)0))); // Get new low word r |= this->data[i]; // Do and store division this->data[i] = r / rhs; }while(i != 0); return (int)(r >>= sizeof(unsigned int) * 8); }

The below prints 0:

Code:#include <iostream> #include "BigInt.hpp" using namespace std; int main() { BigNum::BigInt t; t = 101; t /= 3; cout << t % 10 << endl; return 0; }