Nikde neni v C garantovano jak jsou implementovana signed cisla.
V posledním C23 standardu už je to garantované, signed čísla musí být implementována jako druhý doplněk. Měli šanci opravit right shift na signed číslech, ale neudělali to, v C23 je pořád tohle:
The result of E1 >> E2 is E1 right-shifted E2 bit positions. If E1 has an unsigned type or if E1 has a signed type and a nonnegative value, the value of the result is the integral part of the quotient of E1/2E2 . If E1 has a signed type and a negative value, the resulting value is implementation-defined
Na dane architekture nevis jaky bude vysledek, dokud nevyzkousis jaka je implementace...
Ale to je problém jen C! Ostatní jazyky přesně specifikují, co right shift na signed číslech dělá a není to implementation defined, např. v Rustu je to vždy arithmetic shift.