Frage zu Code



  • hallo,

    wieso funktioniert mein links shift um 1 nicht ?
    Will mir alle 2er Potenzen anzeigen lassen. Warum klappt es nicht ­čś×

    #include <iostream>
    
    void main(void)
    {
        int x=1;
    
    	for(int i=0;i<8;i++)
    	{
    		std::cout<<x<<std::endl;
    		x<<1; 
    
    	}
    
    }
    


  • Hy

    x <<= 1;
    

    Dann funktionierst auch.
    Das hier:

    x << 1
    

    schiebt zwar das ganze aber speichert es ja nicht mehr in der Variable.

    Mfg marco



  • woher willst du wissen, dass das nicht funktioniert?
    Du schmei├čt das Ergebnis ja einfach weg.
    Wolltest Du

    x = x << 1;
    

    haben?



  • hui danke ­čÖé



  • da h├Ątt ich noch eine kurze Frage.

    wei├č jemand wie man pr├╝fen kann ob in einem bitadressierbaren Byte gepr├╝ft
    werden kann ob mehr als 1 bit gesetzt ist ?



  • unsigned char meinByte = 101;
       std::bitset<8> meineBits = meinByte;
       size_t anzahlBits = meineBits.count();
    

    oder

    unsigned char meinByte = 101;
       size_t anzahlBites = meinByte & 1 + meinByte & 2 + meinByte & 4 + meinByte & 8 + 
                            meinByte & 16 + meinByte & 32 + meinByte & 64 + meinByte & 128;
    


  • ok danke Fellhuhn.

    aber bin mir nicht sicher ob deine 2.L├Âsung funktioniert.

    schlie├člich addierst du alle und verkn├╝pfungen.

    sagen wir das 3.Bit ist gesetzt und das 4.Bit.

    dann bekommst du 1000+10000 ergibt 24 . zum z├Ąhlen nutzt das nichts.



  • Oops, nat├╝rlich... moment...

    unsigned char meinByte = 101;
       size_t anzahlBites = !!(meinByte & 1) + 
                            !!(meinByte & 2) + 
                            !!(meinByte & 4) + 
                            !!(meinByte & 8) + 
                            !!(meinByte & 16) + 
                            !!(meinByte & 32) + 
                            !!(meinByte & 64) + 
                            !!(meinByte & 128);
    

    EDIT:

    oder man benutzt:

    unsigned int v = 123; // dein byte
    unsigned int c = 0; // die summe an bytes
    for (c = 0; v; c++)
    {
      v &= v - 1; 
    }
    


  • versteh ich trotzdem nicht. Wozu "!!" ?



  • blurry333 schrieb:

    versteh ich trotzdem nicht. Wozu "!!" ?

    !!123 = !0 = 1
    !!0 = !1 = 0

    ­čśë



  • weil man so in einen boolean umwandelt
    !(x)
    ->
    nicht x (bei x = 0 false ansonsten true)

    da das jetzt das gegenteil ist, m├╝ssen wirs noch mal negieren
    man kann auch einfach
    bool(x) schreiben

    btw:
    void main(void)
    ist weder in C noch C++ g├╝ltig
    ->
    int main(void)
    das void in klammern l├Ąsst man in C++ weg:
    int main()

    bb



  • hmm .

    ! operator dreht doch nur die bits um hab ich gedacht ?

    aus 101001 wird !101001 = 010110

    !123 = 0 ??



  • hmm boolean aso.

    wie hei├čt der invertierungsoperator ?



  • blurry333 schrieb:

    hab ich gedacht ?

    Du sollst wissen, nicht denken ­čśë
    Was du meinst ist der Komplement-Operator "~"
    ! ist der boolsche not-Operator, der immer ein boolsches Ergebnis hat (├ťberladungen ausgenommen)



  • aber mein visual studio erlaubt

    void main(void)

    ich will ja nichts zur├╝ckliefern



  • blurry333 schrieb:

    aber mein visual studio erlaubt

    void main(void)

    ich will ja nichts zur├╝ckliefern

    Das muss aber jedes Programm. Das ist der Fehlercode wobei 0 gleich "kein Fehler". Brauchst auch kein return 0 oder sowas angeben, das macht er automatisch.


  • Mod

    blurry333 schrieb:

    aber mein visual studio erlaubt

    void main(void)

    ich will ja nichts zur├╝ckliefern

    Dann musst du aber damit rechnen, dass dein Programm in Zukunft auch nur in Visual Studio compilierbar sein wird. Das ist f├╝r manche Leute gut genug, f├╝r manche Leute nicht.



  • ok fehlercode.

    wann w├╝rde er denn 1 zur├╝ckliefern.

    Was f├╝r Fehler sind gemeint ?

    programmabsturz?



  • blurry333 schrieb:

    ok fehlercode.

    wann w├╝rde er denn 1 zur├╝ckliefern.

    Was f├╝r Fehler sind gemeint ?

    programmabsturz?

    Das ist dir ├╝berlassen. Das einzige was Standard ist, ist 0 zur├╝ckzugeben wenn alles okay ist. Musst es auch nicht benutzen. Der Sinn ist aber zum Beispiel folgender:

    Programme lassen sich verkn├╝pfen indem man folgendes schreibt in der Kommandozeile:

    programmA && programmB && programmC

    Dies bedeutet das zuerst programmA ausgef├╝hrt wird und nur falls dieses 0 zur├╝ckgibt programmB und im erneutes Erfolgsfall programmC.


Log in to reply