#include #include #include int ist_dual(const char *s) { while (*s) if (*s != '0' && *s != '1') return 0; else s++; return 1; } void print_bin(int n) { for (int i = 31; i >= 0; i--) putchar((n >> i) & 1 ? '1' : '0'); } int main(int argc, char *argv[]) { if (argc != 4) { printf("Richtiger Aufruf: %s \n", argv[0]); return 1; } char *a = argv[1], *op = argv[2], *b = argv[3]; int ok = 1; if (!ist_dual(a)) { printf("....... %s ist keine erlaubte Dualzahl\n", a); ok = 0; } if (!ist_dual(b)) { printf("....... %s ist keine erlaubte Dualzahl\n", b); ok = 0; } if (strlen(op) != 1 || strchr("+-*/&^", op[0]) == NULL) { printf("....... %s ist kein erlaubter Operator\n", op); ok = 0; } if (!ok) return 1; int x = strtol(a, NULL, 2), y = strtol(b, NULL, 2), r = 0; if (*op == '/' && y == 0) { printf("Fehler: Division durch 0\n"); return 1; } switch (*op) { case '+': r = x + y; break; case '-': r = x - y; break; case '*': r = x * y; break; case '/': r = x / y; break; case '&': r = x & y; break; case '^': r = x ^ y; break; } printf("%s %s %s =\n....... ", a, op, b); print_bin(r); printf(" (0x%X)\n", r); return 0; }