Was macht der unäre Operator "-" mit unsignierten Datentypen in C / C ++ (und auf verschiedenen Compilern)?

Zum Beispiel:

unsigned int numA = 66; // or anything really
unsigned int numB = -numA;
unsigned int numC = numA & numB

Ich verstehe, dass der bitweise Komplementoperator verwendet werden kann, um das Komplement der beiden zu erhalten (in Verbindung mit einem +1).

Der Grund, den ich frage, ist, dass ich in einem Code für eine Schachengine darauf gestoßen bin. Schach-Engines machen eine Menge 'hackiger' Dinge, um absolute Geschwindigkeit zu erreichen, insbesondere in den Funktionen zur Generierung von Zügen, die millionenfach pro Sekunde aufgerufen werden. (Es hilft nicht, dass es ein Beispiel für die Erzeugung magischer Bitboard-Bewegungen war - die am besten optimierte von allen). Insbesondere dieser Schach-Engine-Code funktioniert nur unter der GCC-Kompilierung korrekt (ich vermute).

Wie gehen verschiedene Compiler damit um? Wie geht gcc im Vergleich zum C ++ - Compiler in VS Studio 2012 Express damit um?

Vielen Dank.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage