Problemas aritméticos não assinados / assinados do livro de perspectiva de um programador

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

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

Para cada uma das seguintes expressões C, você deve indicar se a expressão sempre gera 1. Se sempre produz 1, descreva os princípios matemáticos subjacentes. Caso contrário, dê um exemplo de argumentos que resultem em 0.

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

Para essas perguntas, percebi que apenas A poderia produzir 0, enquanto o resto sempre produz 1.

Sei que isso provavelmente está errado e não estou procurando respostas diretas, mas esperava obter alguns conhecimentos / conselhos gerais sobre como abordar esses problemas.

Eu tenho um professor muito ruim e tenho tentado encontrar recursos on-line, mas realmente não sei por onde começar ou o que procurar. Conheço o básico da aritmética e da mudança de bits do complemento unsigned / two, mas não sei como aplicá-lo para encontrar casos contrários para esses problemas.

questionAnswers(1)

yourAnswerToTheQuestion