diff --git a/04_UDEF/MP/main_04_UDEF_e.cpp b/04_UDEF/MP/main_04_UDEF_e.cpp index daef257..d29b19c 100644 --- a/04_UDEF/MP/main_04_UDEF_e.cpp +++ b/04_UDEF/MP/main_04_UDEF_e.cpp @@ -13,6 +13,7 @@ public: BinaryOctet(const BinaryOctet &) = default; BinaryOctet &operator=(int const &a); const BinaryOctet operator--(int); + const BinaryOctet operator+(BinaryOctet a); }; BinaryOctet::BinaryOctet() { @@ -22,12 +23,13 @@ BinaryOctet::BinaryOctet() { evenParity = true; } + BinaryOctet::BinaryOctet(int x) { - for (int i = 0; i <= bitsPerOctet - 1; i++) { + for (int i = 0; i <= bitsPerOctet - 1; i++) { int tmp = ((x >> i) & 1); bitsAsDigits[i] = (tmp == 1) ? '1' : '0'; } - //TODO: das sollte eigentlich nicht benötigt werden + //FIXME: das sollte eigentlich nicht benötigt werden std::reverse(std::begin(bitsAsDigits), std::end(bitsAsDigits)); //einsen zählen @@ -48,31 +50,56 @@ bool operator!=(BinaryOctet a, BinaryOctet b) { return true; } -const BinaryOctet BinaryOctet::operator--(const int) { +//TODO: this method +const BinaryOctet BinaryOctet::operator--(const int) { + bool over = false; + for(int i = bitsPerOctet - 1; i >= 0; --i) { + int tmp = bitsAsDigits[i] - '0'; + + + + bitsAsDigits[i] = static_cast(tmp + '0'); + } return *this; } -BinaryOctet operator+(BinaryOctet a, BinaryOctet b) { - BinaryOctet result; - for (int i = 0; i < bitsPerOctet; ++i) { - if (a.bitsAsDigits[i] == b.bitsAsDigits[i]) result.bitsAsDigits[i] = '0'; - else result.bitsAsDigits[i] = '1'; +const BinaryOctet BinaryOctet::operator+(BinaryOctet a) { + BinaryOctet result; + bool over = false; + for (int i = bitsPerOctet - 1; i >= 0; --i) { + //Arbeitsvariablen anlegen und char in int umwandeln für einfachere Rechnung + int tmp; + int aI = a.bitsAsDigits[i] - '0'; + int bI = bitsAsDigits[i] - '0'; + + + if(over) tmp = aI + bI + 1; + else tmp = aI + bI; + over = false; + + + if(tmp >= 2) { + over = true; + if (tmp % 2 == 0) tmp = 0; + else tmp = 1; + } + + //Umwandlung in char und ins Ergebnis schreiben + result.bitsAsDigits[i] = static_cast(tmp + '0'); } + return result; +} + + +BinaryOctet operator/(BinaryOctet a, BinaryOctet b) { + BinaryOctet result; return result; } -BinaryOctet operator+(BinaryOctet a, int b) { - -} - -BinaryOctet operator/(BinaryOctet a, BinaryOctet b) { - - return a; -} BinaryOctet &BinaryOctet::operator=(int const &a) { std::string tmp = std::to_string(a); @@ -82,9 +109,9 @@ BinaryOctet &BinaryOctet::operator=(int const &a) { return *this; } + BinaryOctet doCalculation(BinaryOctet a, BinaryOctet b) { BinaryOctet result; - for (; a != b; b--) { a = a + 1; a = a / b; @@ -93,6 +120,7 @@ BinaryOctet doCalculation(BinaryOctet a, BinaryOctet b) { return result; } + // for println(); std::string as_string(BinaryOctet a) { std::string result = "("; @@ -103,20 +131,41 @@ std::string as_string(BinaryOctet a) { return result; } + +std::string as_string(BinaryOctet *a) { + std::string result = "("; + for (char c : a->bitsAsDigits) { + result += c; + } + result += ")"; + return result; +} + + // for std::cout std::ostream &operator<<(std::ostream &os, const BinaryOctet &toBePrinted) { os << as_string(toBePrinted); return os; } + +std::ostream &operator<<(std::ostream &os, BinaryOctet *toBePrinted) { + os << as_string(toBePrinted); + return os; + +} + + int main(int argc, char **argv) { BinaryOctet a = 0b00001111; std::cout << a << std::endl; BinaryOctet b = 0b00000110; std::cout << b << std::endl; - std::cout << new BinaryOctet(5) << std::endl; + b--; + std::cout << b << std::endl; + auto *c = new BinaryOctet(5); + std::cout << c << std::endl; std::cout << a + b << std::endl; - //println("result = ", doCalculation(a,b)); std::cout << "result = " << doCalculation(a, b) << std::endl; return 0; }