Herakles
Profifragensteller
Moin!
Folgende simpel-Programm sei gegeben:
Folgendes ist die Ausgabe:
Lese ich nun aber die man-page von printf(3), finde ich dort folgendes:
Demzufolge sollte mein Programm eigentlich wie folgt aussehen:
Genau hinschauen: Da steht ein "%hd" anstelle eines "%d" im printf-Befehl. Witzigerweise ist die Ausgabe nun so:
Warum ist das so?
Viele Grüße
Herakles
Folgende simpel-Programm sei gegeben:
Code:
#include <stdio.h>
#include <stdint.h>
int main() {
uint16_t w=0x9999;
printf("%d\n",w);
return 0;
}
Folgendes ist die Ausgabe:
Code:
39321
Lese ich nun aber die man-page von printf(3), finde ich dort folgendes:
The length modifier
Here, "integer conversion" stands for d, i, o, u, x, or X conversion.
(...)
h A following integer conversion corresponds to a short int or unsigned short int
argument, or a following n conversion corresponds to a pointer to a short int
argument.
Demzufolge sollte mein Programm eigentlich wie folgt aussehen:
Code:
#include <stdio.h>
#include <stdint.h>
int main() {
uint16_t w=0x9999;
printf("%hd\n",w);
return 0;
}
Genau hinschauen: Da steht ein "%hd" anstelle eines "%d" im printf-Befehl. Witzigerweise ist die Ausgabe nun so:
Code:
-26215
Warum ist das so?
Viele Grüße
Herakles