2011-01-13 19 views
4

Hy! Sorry für meine schlechte Englisch, trotzdem die Fragen ist:-2 <1 = falsch. Warum?

Ich habe diesen Code in Objective-C:

unsigned int a = 1; 
int b = -2 
if (b < a); 

Ich erwarte, dass wahr und stattdessen das Ergebnis der if(b < a) falsch ist, warum?

+1

unsigned * nicht unsigend – tekknolagi

+0

interpretiert objektive c negative ganze Zahlen als positiv? könnte sein? – tekknolagi

+0

Typ ohne Vorzeichen kann keine negativen Zahlen enthalten. Verwenden Sie einen Debugger, um den tatsächlichen Wert in B zu sehen, Sie werden sehen, es ist nicht -2 – Sparky

Antwort

9

C -2 in einen unsigned int im Vergleich automatisch konvertiert. Das Ergebnis ist, dass der Vergleich tatsächlich (4294967294 < 1) ist, was nicht der Fall ist.

2

Lassen Sie das "unsigned" fallen.

Wenn Sie bei der binären Darstellung von -2 suchen und verwenden Sie dann, dass binärer Wert als unsigned int, dann b> a

Hoffnung, das hilft!

7

Sie vergleichen signed mit unsigned. Der vorzeichenbehaftete Wert wird zu unsigned hochgestuft, was zu einer großen Zahl führt (0xFFFFFFFD Ich denke), die definitiv größer ist als 1

0

Sie können nicht vorzeichenbehaftete und vorzeichenlose Zahlen wie diese vergleichen. Höchstwahrscheinlich wird das unsignierte Zeichen auf einen vorzeichenbehafteten Wert hochgestuft, was entweder zu undefiniertem Verhalten oder zu einer wirklich großen Zahl führt (abhängig davon, wie der negative Wert gespeichert wurde).

Verwandte Themen