enum
-
Zu Mr Evil:
danke, aber ich sitze da grad an einem Übungsprogramm und ich möchte es nur verstehen. Dieses Programm hat keinen wirklich praktischen Nutzen, deshalb arbeite ich auch mit der Zahl.Zu CStoll:
ich bin sicher, dass ich keinen enum-Wert unterschlagen habe!
und was für eine Rechenoperation soll dieser senkrechte Strich '|' sein? Ich weiß nämlich nicht, wie ich bei "2|1" auf "3" kommen soll, ausser dieser Strich wird durch ein "+" ersetzt??Ciao und hoffentlich bis gleich... ?
-
julchen81 schrieb:
ich bin sicher, dass ich keinen enum-Wert unterschlagen habe!
Dann passt der Code-Schnipsel nicht zu deiner Fehlerbeschreibung (außer das MAXBOX wird irgendwo im Inneren der Klasse mit reingerechnet).
und was für eine Rechenoperation soll dieser senkrechte Strich '|' sein? Ich weiß nämlich nicht, wie ich bei "2|1" auf "3" kommen soll, ausser dieser Strich wird durch ein "+" ersetzt??
Das ist eine bitweise ODER-Kombination. Die Zahlen werden im Binärformat ausgeschrieben und jede Stelle wird einzeln miteinander verknüpft:
2 = 0010 1 = 0001 -------- 0011 = 3
-
Hi!
Wenn mich nicht alles täuscht, ist das ein Bitvergleich (in diesem Fall ein logisches 'or'). Also:true | false = true
false | true = true
true | true = true
false | false = falseoder:
1 | 0 = 1
0 | 1 = 1
1 | 1 = 1
0 | 0 = 1In deiner Anwendung:
0001 --> '1'
0010 --> '2'
----
0011 --> die im Programm auftretende '3'
-
@CStoll
ah... binäre Addition, *Groschen-Fall* - danke für deine Lösung!Also dieses MAXBOX wird nirgendwo mit eingerechnet, hier ist der (nahezu) komplette Code:
#include <iostream> #include <string> using namespace std; class Window { public: enum eSTYLE { SYSMENU, MINBOX, MAXBOX, CLOSEBOX }; private: int xpos; int ypos; int xsize; int ysize; string title; eSTYLE stil; public: Window(int x, int y, int l, int b, string t, eSTYLE s); ~Window(); void Paint(); void MoveWin(int x, int y); void ResizeWin(int x, int y); }; Window::Window(int x, int y, int l, int b, string t, eSTYLE s) { xpos = x; ypos = y; xsize = l; ysize = b; title = t; stil = s; cout << title << " erstellt.\n"; } Window::~Window() { cout << title << " Fenster vernichtet!\n"; } void Window::Paint() { cout << title << endl; cout << "Position: " << xpos << ", " << ypos << endl; cout << "Groesse: " << xsize << ", " << ysize << endl; cout << "Stil: " << stil << endl << endl; } void Window::MoveWin(int x, int y) { .... } void Window::ResizeWin(int x, int y) { .... } void main() { Window win1(10, 20, 50, 60, "Fenster1", Window::eSTYLE(Window::SYSMENU)); Window win2(100, 200, 500, 600, "Fenster2", Window::eSTYLE(Window::MINBOX|Window::SYSMENU)); win1.Paint(); win2.Paint(); }
-
oh mein Gott, ich blindes Huhn... du hattest Recht, es wird mir keine 3 sondern eine 1 ausgegeben.
Hab nämlich meine und die Musterlösung nebenher angesehen, und in DER wird eine 3 ausgegeben (die ist natürlich ein bisschen anders als meine Lösung, daher passt das da auch!
@SlimJim
danke dir auch... macht mich etwas skeptisch, deine Idee, denn was passiert bei 3|1 ? Da stimmt das dann nämlich nicht mehr so ganz... die binäre Addition ergibt dann nämlich einen Übertrag - oder versteh ich da jetzt was falsch?grüßle
-
julchen81 schrieb:
...die binäre Addition ergibt dann nämlich einen Übertrag - oder versteh ich da jetzt was falsch?
Vergiß den Begriff binäre Addition.
3|1 ist weiterhin ein binäres oder, und ergibt daher weiterhin 3 - Keine binäre Addition.
3: 11
1: 01
binäres oder: 11 | 01 = 11cu Andé
-
Und jetzt doch noch mal:
wenn ich CLOSEBOX|MINBOX übergebe, ergibt sich der Wert "3", was aber dann nicht durch binäre Addition zu erklären ist:
1 1
+ 0 1
------
1 0 0 , also 4.Allerdings mit der oder-Verknüpfung von Slim Jim ergibt sich 1 1, also 3, was auch mein Programm ausgibt.
Wie's scheint hatte doch Slim Jim die richtige Idee oder ich übersehe wieder was??
ciao...
-
julchen81 schrieb:
Und jetzt doch noch mal:...
Wie's scheint hatte doch Slim Jim die richtige Idee oder ich übersehe wieder was?? ...
Wie schon angemerkt sind die Operatoren | und & ein Bitweiser Vergleich (im Gegensatz zu || und && die einen ganzheitlichen Vergleich machen).
Am Beispiel:
0011
| 0101
------
0111
(Überall wo mindestens ein Bit gesetzt ist, ist es anschließend auch gesetzt)0011
& 0101
------
0001
(Überall wo beide Bits gesetzt sind, ist es anschließend auch gesetzt)
-
julchen81 schrieb:
Wie's scheint hatte doch Slim Jim die richtige Idee oder ich übersehe wieder was??
Ja, du übersiehst, daß du hier der/die einzige warst, der den Begriff "binäre Addition" verwendet hat - das ist keine Addition, sondern eine sog. "Disjunktion".
-
0 | 0 bleibt 0
0 | 1 wird 1
1 | 0 wird 1
1 | 1 bleibt 1 (es gibt keinen Übertrag)
-
ok, jetzt hab ich's wirklich.
Keine Ahnung, wo sich mein Köpfchen wieder dieses Wort "Addition" hergezaubert hat, stand tatsächlich nicht da. Wird Zeit, dass Feierabend kommt *ggg*
Euch allen noch einen schönen Tag !!