2015-05-30 17 views
5
unsigned int value = 1860; 
int data = 1300; 
if((data - value) > 0) 
{ 
    printf("Why it is printing this"); 
} 

Ausgabe: Warum druckt diesesubtrahieren Signed ganze Zahl von Unsigned integer

ich verstehen mich nicht, warum Subtraktion signierter Form unsigned Durchgang durch das „wenn“, obwohl Wert der Variablen „Daten“ kleiner als Variable "Wert". Ich bin wirklich neugierig, wie die subtrahierte und nicht signierte Subtraktion "ein kleiner Fehler" ist, führt aber zu einem großen, weil ich die "Delay" -Funktion anstelle von "printf" benutzte und meine Aufgabe verzögert wurde, was Chaos verursachte.

unsigned int value = 1860; 
int data = 1300; 
if((data - value) > 0) 
{ 
    Delay(data - value); 
} 

Dieser Teil ist behalten verzögern und meine Aufgabe nie bedeutet ends.That Wert von „Daten - Wert“ ist negativ, das ist, warum es auf unendliche Warte geht. Gleichzeitig passiert es das "if" wobei die Bedingung "data-value"> 0 ist. Mein Zweifel, wenn signiert wird, wird in unsigned konvertiert und durchläuft "if", dann gibt es einen negativen Wert für die "Delay" -Funktion.

+0

Der Wert von "Datenwert" ist nicht negativ, es ist genau das Gegenteil, d. H. Zu groß. Versuchen Sie Folgendes: 'printf ("% u ", Datenwert);' – skrtbhtngr

Antwort

7

int Datentyp ist standardmäßig signed in C/C++, d. H. Unterstützt negative Zahlen. Wenn ein Ausdruck sowohl signed als auch unsignedint Werte enthält, wird der signed int automatisch in unsigned int konvertiert und das Ergebnis wird nicht weniger als 0 sein. Was Sie tun möchten, ist dies:

unsigned int value = 1860; 
int data = 1300; 
if((signed)(data - value) > 0) 
{ 
    printf("Why it is printing this"); 
} 

Es ausdrücklich das Ergebnis des Ausdrucks zu einem signed Wert umwandelt, so dass es eine negative Zahl sein kann.

Verwandte Themen