void printBinary(const binary& x) { for(int i=x.size()-1; i>=0; --i) { std::cout << x.getNumberAt(i); } std::cout << std::endl; }
long long int convertBinToDec(const binary& x) // binary -> decimal converter { long long int result = 0; for(int i=x.size()-1; i>=0; --i) { if(x.getNumberAt(i)) { result += pow(2,i); } } return result; }
binary operator-(const binary& left, const binary& right) { int n = left.size(); binary result = initBinaryResult(n); binary rightTemp = right; // 2-complement rightTemp.fill(n); for(int i=0; i<n; ++i) { rightTemp.setNumberAt(i, !rightTemp.getNumberAt(i)); } rightTemp = rightTemp + 1; bool overflow = false; for(int i=0; i<n; ++i) { bool leftI = left.getNumberAt(i); bool rightI = rightTemp.getNumberAt(i); result.setNumberAt(i, leftI ^ rightI ^ overflow); if((leftI & rightI) || (overflow & (leftI | rightI)) ) { overflow = true; } else { overflow = false; } } return result; }
bool lsb(const binary& x) // least significant bit { return x.getNumberAt(0); }