// file main_04_UDEF_e.cpp #include #include const int bitsPerOctet = 8; struct BinaryOctet { public: bool evenParity; // set to true if number of '1' in bitsAsDigits is even, false otherwise char bitsAsDigits[bitsPerOctet]{}; // bit values as chars BinaryOctet(); BinaryOctet(int x); BinaryOctet(const BinaryOctet &) = default; BinaryOctet &operator=(int const &a); const BinaryOctet operator--(int); }; BinaryOctet::BinaryOctet() { for (char &bitsAsDigit : bitsAsDigits) { bitsAsDigit = '0'; } evenParity = true; } BinaryOctet::BinaryOctet(int x) { 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 std::reverse(std::begin(bitsAsDigits), std::end(bitsAsDigits)); //einsen zählen int i = 0; for (char c : bitsAsDigits) { if (c == '1') i++; } evenParity = i % 2 == 0; } bool operator!=(BinaryOctet a, BinaryOctet b) { if (a.evenParity != b.evenParity) return false; for (int i = 0; i < bitsPerOctet; ++i) { if (a.bitsAsDigits[i] != b.bitsAsDigits[i]) return false; } return true; } const BinaryOctet BinaryOctet::operator--(const int) { 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'; } 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); for (int i = 0; i >= tmp.length(); i++) { bitsAsDigits[i] = tmp[i]; } return *this; } BinaryOctet doCalculation(BinaryOctet a, BinaryOctet b) { BinaryOctet result; for (; a != b; b--) { a = a + 1; a = a / b; } result = a + b; return result; } // for println(); 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; } 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; std::cout << a + b << std::endl; //println("result = ", doCalculation(a,b)); std::cout << "result = " << doCalculation(a, b) << std::endl; return 0; }