Unsignierte / signierte Rechenaufgaben aus der Perspektive eines Programmierers

int x = random();
int y = random();

unsigned ux = (unsigned) x;
unsigned uy = (unsigned) y;

Für jeden der folgenden C-Ausdrücke müssen Sie angeben, ob der Ausdruck immer 1 ergibt oder nicht. Wenn er immer 1 ergibt, beschreiben Sie die zugrunde liegenden mathematischen Prinzipien. Geben Sie andernfalls ein Beispiel für Argumente an, die dazu führen, dass es 0 ergibt.

A. (x<y) == (-x>-y) 
B. ((x+y)<<4) + y-x == 17*y+15*x
C. ~x+~y+1 == ~(x+y)
D. (ux-uy) == -(unsigned)(y-x)
E. ((x >> 2) << 2) <= x

Für diese Fragen bekam ich, dass nur A 0 ergeben konnte, während der Rest immer 1 ergab.

Ich weiß, dass dies wahrscheinlich falsch ist und ich nicht nach direkten Antworten suche, aber ich hatte gehofft, einige allgemeine Kenntnisse / Ratschläge zu bekommen, wie ich diese Probleme angehen kann.

Ich habe einen wirklich schlechten Professor und habe versucht, Ressourcen online zu finden, aber ich weiß nicht, wo ich anfangen soll oder wonach ich suchen soll. Ich kenne die Grundlagen der Arithmetik und der Bitverschiebung von vorzeichenlosen / Zweierkomplementen, aber ich weiß nicht, wie ich sie anwenden soll, um Gegenfälle für diese Probleme zu finde

Antworten auf die Frage(2)

Ihre Antwort auf die Frage