Software > Coding
Hilfe bei PureC printf und Adressberechnung
guest522:
Hi,
ich steh auf dem Schlauch.....
Welche Adresse berechnet sich aus dem Ausdruck
--- Code: ---(UBYTE *)(0xfedc8000L) + (int)(0x03c8-0x8000)
--- Ende Code ---
Wie stelle ich das per printf in hex dar? Ich bekomme immer nur 4-stellige Hex Ausgaben per %x
Was soll die -0x8000 bewirken?
Danke
m0n0:
Hast Du beim Printf schon mal %p versucht? Ich meine das ist dafür da um Werte von Pointern auszugeben, sollte also genau das richtige sein....
guest522:
Das funzt, danke! Ergebnis: fedc03c8
d.h. die Addition findet nur im int Teil statt (?) und es ensteht kein "Übertrag" ins nächste Byte. Ich hätte fedd03c8 erwartet.
Wer kann mir das erklären?
simonsunnyboy:
Was für eine Datenbreite benutzt int in deinem Compiler?
Wenn der nur 16Bit benutzt, dann geht natürlich etwas verloren.
Da Adressen (Pointer) am ST immer vom Typ unsigned long sind (4 Bytes)
Mein Ratschlag: Den Datentyp int grundsätzlich nicht benutzen und stattdessen immer die Typen verwenden, die eine wohldefinierte Länge an Bytes benutzen. Entweder selbst definierte, oder die Typen aus der GODLIB der Reservor Gods oder standardkonform stdint.h, welches Pure C aber leider per Default nicht bietet.
*NACHTRAG:* DIe Godlib inklusive ihrer Header habe ich in einem anderen Thread mal hochgeladen.
guest522:
Es handelt sich um PureC.
Die Ursache ist aber wohl eher die Art wie C die Addition behandelt.
--- Code: ---(UBYTE *)(0xfedc8000L) + (int) (0x03c8-0x8000) ==> fedc03c8
also
FEDC 8000
+ 83C8
-----------
FEDC 03C8 Übertrag geht verloren
(UBYTE *)(0xfedc8000L) + (long)(0x03c8-0x8000) ==> fedd03c8
FEDC 8000
+ 0000 83C8
-----------
FEDD 03C8 Übertrag findet statt
(ULONG *)(0xfedc8000L) + (long)(0x03c8-0x8000) ==> fede8f20
das versteh ich überhaupt nicht mehr:
FEDC 8000
+ 0000 83C8
-----------
FEDE 8F20
das kann nur sein, wenn vor der Addition der 2. Operand um 2 bit nach links geschoben wird:
1111 1110 1101 1100 1000 0000 0000 0000
10 0000 1111 0010 00
---------------------------------------
1111 1110 1101 1110 1000 1111 0010 0000
--- Ende Code ---
Wer kann mir das erklären?
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln