Negative Werte zu vorzeichenlosen Variablen zuweisen: Was passiert?
Wenn Sie in C versuchen, einer vorzeichenlosen Variablen einen negativen Wert zuzuweisen, wie zum Beispiel:
unsigned int nVal = 0; nVal = -5;
das Verhalten kann sein verwirrend.
Die Erklärung
Gemäß Abschnitt 4.7 conv.integral des C-Standards:
"Wenn der Zieltyp vorzeichenlos ist, wird das Ergebnis value ist die kleinste vorzeichenlose Ganzzahl, die mit der Quell-Ganzzahl übereinstimmt (Modulo 2n wobei n ist die Anzahl der Bits, die zur Darstellung des vorzeichenlosen Typs verwendet werden).“
In der Zweierkomplementdarstellung (die die meisten modernen Prozessoren verwenden) bedeutet dies, dass es keine tatsächliche Änderung im Bitmuster gibt, wenn keine Kürzung erfolgt. Das Ergebnis ist der Wert, der (-5 232) oder 4294967291 entspricht. Dies liegt daran, dass die Zweierkomplementdarstellung von -5 dieselbe ist wie die bitweise Darstellung von 4294967291.
Kurz gesagt führt die Zuweisung eines negativen Werts zu einer vorzeichenlosen Variablen nicht zu einem Überlauf oder einer Ausnahme. Stattdessen wird auf den entsprechenden positiven Wert ohne Vorzeichen umgeschaltet.
Hinweis:
Obwohl dieses Verhalten in C gut definiert ist, wird es nicht allgemein verstanden. Es ist wichtig, sich dieses potenziellen Problems bewusst zu sein, wenn man mit vorzeichenlosen Variablen arbeitet.
Das obige ist der detaillierte Inhalt vonWas passiert, wenn Sie einer vorzeichenlosen Variablen in C einen negativen Wert zuweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!