На самом деле, это даст вам 320, только если ваша реализация использует кодировку дополнения до двух для целых чисел.Причина в том, что это интерпретируется как:
(((~a) + a) & ((a + a) << a))
= -1 & (10 << 5)
= 10 << 5
= 320
-1 в дополнении к двум - все 1 бит, поэтому, когда вы and
что с чем-либо, вы получите то же значение.
Однако с добавлением ~a + a
даст вам ноль, так что конечный результат будет равен нулю.
Стандарт ISO C допускает кодирование дополнения до двух, дополнения до одного и знака / величины для целых чисел со знаком, и это однопричина, по которой такой код по своей сути плох.