Hexadezimalsystem

Einführung

Das Hexadezimalsystem ist eine Schreibweise, mit der man Zahlen schreiben kann.
Die Größte Zahl, die eine Stelle besitzen kann ist 15 (Hex: F).
Gültige Zahlen für die Schreibweise sind 0-9 und für die weiteren bis 15 werden die Ziffer A-F verwendet.

123456789ABCDEF
123456789101112131415

15 ist die höchste Zahl, da es sich hier um „Nibbles“ handelt. Ein Nibbel ist die Hälfte von einem Byte, dass heißt ist 4 Bit groß.
Die Schreibweise fängt mit einem „0x“ an.
Die Null teilt uns mit, dass es sich hier um eine Zahl handelt und die X teilt uns mit, dass es sich hier um die Hex-Schreibweise handelt.
Das erste Bit entscheidet dabei das Vorzeichen von dem Zahl.

Schreibweise

Das besondere bei dieser Schreibweise ist, dass es sich hier um eine „Bit-Kette“ handelt, das heißt, die Zahlen werden nicht addiert oder subtrahiert, die Bits werden einfach „drangehängt“
Hier ist ein schlichtes Beispiel mit Hex von der Länge von einem Byte:
Hex-Schreibweise: 0xFF
Als Binär:

FF
1111 1111

Das erste Bit

Wenn die Zahl signed ist entscheidet das erste Bit über den Vorzeichen des folgenden Zahles.
Ist das erste Bit gesetzt, also 1, handelt es sich um eine nagetive Zahl.
Das heißt, wenn der erste Bit bzw. die erste Stelle nach 0x größer als 7 ist, ist die Zahl negativ.
7 ist als binär 0101 und besitzt somit eine 0 am Anfang.

short var = 0x7FFF; //short ist 1 Word
cout << var;

Als Resultat erhalten wir hier 32767 und als binär würde das ganze so aussehen:

7FFF
0111111111111111

Nun machen wir aus der 7 eine 8:

short var = 0x8FFF; //short ist 1 Word
cout << var;

So bekommen wir als Resultat -28673 und als binär würde das ganze so aussehen:

8FFF
1000111111111111

signed und unsigned

Diese Schreibweise ermöglicht es uns auch, signed und unsigned zu vergleichen ohne irgendwelche Fehlermeldung zu erhalten.
Sagen wir, eine Funktion liefert „unsigned int“ als Rückgabewert aus und bei Fehler -1.
So würden wir bei einem Vergleich eine Warnung erhalten.

unsigned int funktion(void){
    return -1;
}

int main ( int argc, char* argv[] )
{
    if( funktion() == -1)
    {
         cout << "Fehler!\n";
    }
}

Doch dieses Problem ist mit diese Schreibweise lösbar, indem wir die „größte negative Zahl“ auffordern:

unsigned int funktion(void){
    return -1;
}

int main ( int argc, char* argv[] )
{
    if( funktion() == 0xFFFFFFFF)
    {
         cout << "Fehler!\n";
    }
}

0xFFFFFFFF ist bei einem Integer die größte negative Zahl, also -1.
Da ein int 4 Bytes kapselt schreiben wir hier 8 x F.
Als binär:

FFFFFFFF
11111111111111111111111111111111

und 0xFFFFFFFE wäre -2.

FFFFFFFE
11111111111111111111111111111110