variablen hexadezimale Werte zuweisen



  • Hoi,

    Wir haben folgende Situation:

    long int a; // long Integer
    a=1;
    

    Jetzt ist der Wert der Variable a 1.

    Wenn ich jetzt der Variable einen Hexadezimalen Wert zuweise, wird dann berücksichtigt, ob diese signed oder unsigned ist?
    Oder werden die Bits einfach gesetzt?

    Also kommt da raus

    int a=0x3 //0..000011
    unsigned a=0x3 //0...00011
    

    Ich hoffe ihr versteht was ich meine..... 🙄

    mfg



  • Natürlich wird entsprechend umgewandelt. Im übrigen braucht die Bitdarstellung dich überhaupt nicht zu interessieren.



  • Oh doch, es interessiert mich imens.

    Ich meine folgendes,
    wenn ich einer Variable einen hexadezimalen wert zuweise, werden dann immer die gleichen Bits gesetzt oder wird signed und unsigned berücksichtig?

    Wenn ich z.B den 2 Bit in einem integer setzten will, kann ich dann einfach

    int integer;
    integer=0x0 // alle Bits == 0
    integer=0x2 // Bit 2 setzen
    

    Oder anders, kann man die hexadezimale Schreibweise als direktes setzen von Bits ansehen und nicht als Zahl?



  • Nock schrieb:

    Oh doch, es interessiert mich imens.

    Selbst schuld. Wenn du wirklich damit rumspielen willst, solltest du dir die Bitoperatoren (vor allem & (Binäres UND) und | (Binäres ODER)) ansehen.

    Ich meine folgendes, ...

    Ich weiß, was du meinst.

    wird signed und unsigned berücksichtig?

    Ja. Steht auch in meinem letzten Post ... Aber signed integer sehen von 0 bis INT_MAX genauso aus wie unsigned integer (wobei ich nicht weiß, ob das im Standard festgelegt ist).

    integer=0x2 // Bit 2 setzen
    

    Damit setzt du nicht nur das zweite Bit, sondern löschst auch alle anderen. Um nur das zweite Bit zu setzen müsstest du folgendes machen:

    integer |= 0x2;
    

    Recht praktisch für soetwas kann auch folgende Funktion sein:

    template <typename T>
    std::string to_binary (const T& p)
    {
        const size_t len = sizeof (T) * CHAR_BIT;
    
        std::string result (len, '0');
        for (int i = 0; i < len; ++i)
            if (p & (1 << i))
                result[len - (i + 1)] = '1';
        return result;
    }
    

    Die gibt dir die Binärdarstellung eines beliebigen Objektes als std::string zurück.


Anmelden zum Antworten