Bitmanipulation UND-verknüpfung



  • hi,

    ich generiere eine zufallszahl 0-255 (8bit), maskiere mit 1, wenn true soll objekt von klasse Mann erstellt werden falls nicht 1/true erstelle ein objekt von typ Frau

    srand((unsigned)time(NULL)); 
        unsigned char z1=rand();
    
    	if(z1 & 1)
    	    Mann m;
    	else
    	Frau f;
    

    wieso wird trotzdem immer auch f erstellt?



  • Hi!

    Was meinst du mit "auch"? Es kann nur Mann oder Frau erstellt werden, aber nie beides, sind ja auch beides verschiedene Zweige.

    Code-Hacker



  • bei meinem code, wird falls z1 eine ungerade zahl ist erst Mann m angeleget dann springt er aus dem zweig geht an "Frau f" vorbei aber im debuger ist dann Frau f erstellt worden und m ist im funktonsblock nicht mehr ansprechbar.

    klar entweder soll Mann m oder Frau f erstellt werden

    wenn z1 eine gerade zahl ist und somit (z1 & 1) null zurückgeben springt er auch sofort zum else block und erstellt nur f



  • das geht so nicht. der gültigkeitsbereich beider variablen geht nicht über den if bzw. den else block hinaus. Du müsstest das mit new anlegen:

    person* mann_oder_frau = NULL;  //bzw. frau_oder_mann ;)
    if(z1 & 1)
      mann_oder_frau = new Mann;
    else
      mann_oder_frau = new Frau;
    

    natürlich müssen die beiden von person abgeleitet sein, damit das funktioniert.
    geloescht

    PS: hab ich jetzt blödsinn verzapft?



  • google() schrieb:

    bei meinem code, wird falls z1 eine ungerade zahl ist erst Mann m angeleget dann springt er aus dem zweig geht an "Frau f" vorbei aber im debuger ist dann Frau f erstellt worden

    Na und? Was der Debugger anzeigt kann dir doch egal sein. Fakt ist, dass in einem if/else Konstrukt immer nur ein Zweig ausgeführt wird und zwar genau einer nie beide oder gar keiner. Sollte dem nicht so sein, dann solltest du dir besser einen anderen Compiler zulegen.



  • ich löse es jetzt anders trotzdem danke

    Mensch Mann::operator+(Frau anyFrau){
    
        srand((unsigned)time(NULL)); 
    	unsigned char z1=rand();
    	Mensch temp;
    	if(z1 & 1){
    		temp.nDNA.geschlecht = nDNA.geschlecht;}
    	else
    		temp.nDNA.geschlecht = anyFrau.nDNA.geschlecht;
    	if(z1 & 2){
    		temp.nDNA.hautfarbe = nDNA.hautfarbe;}
    	else
    		temp.nDNA.hautfarbe = anyFrau.nDNA.hautfarbe;
    	if(z1 & 4){
    .
    .
    .
    .
    
    return temp;
    }
    

Anmelden zum Antworten