======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.\\ ^1^2^3^4^5^6^7^8^9^A^B^C^D^E^F^ |1|2|3|4|5|6|7|8|9|10|11|12|13|14|15| 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:\\ ^F^F^ |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: ^7^F^F^F^ |0111|1111|1111|1111| 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: ^8^F^F^F^ |1000|1111|1111|1111| ====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:\\ ^F^F^F^F^F^F^F^F^ |1111|1111|1111|1111|1111|1111|1111|1111| und 0xFFFFFFFE wäre -2. ^F^F^F^F^F^F^F^E^ |1111|1111|1111|1111|1111|1111|1111|1110|