Gast
#1412290
unsigned long kann welche Zahlenwerte speichern? folgender Code liefert mir werte eines SIGNED long anstelle eines unsigend Long:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Compiler in diesem Fall ist DevC++
|
Anzeige
|
unsigned long geht nicht?
Gast
#1412290
unsigned long kann welche Zahlenwerte speichern? folgender Code liefert mir werte eines SIGNED long anstelle eines unsigend Long:
Compiler in diesem Fall ist DevC++ Der Format Specifier "%d" nimmt ja auch signed int an. Probier mal "%u" stattdessen.
Gast
#1412306
na toll also wenn ich %u wähle dann lässt der mir logischerweise nur das Vorzeichen weg. Man sieht in meinem Code sehr schön, dass aber die WERTE! nicht die sind, die man bei einem unsigned erwartet! Es werden negative Werte kreiert! Warum?!? Versuch's mal mit Lesen. Der Doku von printf. Timo P schrieb: > na toll also wenn ich %u wähle dann lässt der mir logischerweise nur das > Vorzeichen weg. SO könnte man das auch sehen. Man kann es aber auch so sehen: Das Most Significant Bit wird dann nicht mehr als Vorzeichen gewertet, sondern als ganz normales Dtaenbit. > Man sieht in meinem Code sehr schön, dass aber die WERTE! nicht die > sind, die man bei einem unsigned erwartet! Es werden negative Werte > kreiert! Ja klar. Wenn du deinem printf sagst, dass die beiden Bytes, die es bekommt ein signed integer sind, dann wertet es die auch so aus. Wenn du ihm mit %u mitteilst, dass die beiden Bytes zusammen einen unsigned bilden, dann werden sie auch entsprechend ausgewertet. > Warum?!? Weil du printf anlügst.
Gast
#1412312
> Man sieht in meinem Code sehr schön, dass aber die WERTE! nicht die > sind, die man bei einem unsigned erwartet! Es werden negative Werte > kreiert! nein. 16bit können erstmal nicht negativ sein, erst wenn du sie darstellt wird entschieden wie die 16bit zu unterpretieren sind.
Gast
#1412317
Richtig, wenn ich einen zahlenwert zuweise, ist und bleibt das die gleiche Bitfolge! IMMER! zumindest wenn die Bitreihenfolge gleich bleibt ;) soviel ist mir ja klar.
Gast
#1412324
>16bit können erstmal nicht negativ sein
Wir haben hier zwar 32 Bit-Werte, aber ansonsten hast Du recht...
Timo P schrieb:
> soviel ist mir ja klar.
Was ist dir dann unklar?
Ein anderer Erklärungsversuch:
printf kann NICHT anhand des übergebenen Bitmusters unterscheiden, ob
das nun als signed oder unsigned anzusehen ist. Es ist also auf deine
Hilfe angewiesen, die du in Form der Formatspezifizierung geben musst.
printf verlässt sich ganz und gar darauf, dass du keinen Scheiss baust
und es anweist eine Bitfolge, die du als unsigned sehen möchtest, als
signed auszugeben.
C: You get, what you asked for.
Ganz abgesehen davon sind %u bzw. %d sowieso die völlig falschen Formatspezifizierer, da du es mit einem long zu tun hast. Da wäre %lu (=unsigned long) bzw %ld (=signed long) angebracht, bzw. das Lesen der Doku (wie A.K. schon angemerkt hat) oder noch besser Grundlagenliteratur zum Thema C-Programmierung.
Gast
#1412351
ich werde %lu nutzen! THX! Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|