Die Klammer tut nichts zur Sache...

Bei der verschachtelten Operation wird innen auf int-Ebene ausgewertet. Die genaue Semantik kannst du der C-Spezifikation entnehmen.

Die Zeile ist NICHT gleichbedeutend mit der Aufspaltung in einzelne Zuweisungen!

Wenn du es in einer Zeile haben willst, geht

bar = ((uint8_t) ~foo) >> 4;