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 = false

    oder:

    1 | 0 = 1
    0 | 1 = 1
    1 | 1 = 1
    0 | 0 = 1

    In 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();
    }
    


  • @CStoll

    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 = 11

    cu 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 !!


Anmelden zum Antworten