I feel lucky to have gotten two's complement early.
Turns out that if you truly understand two's complement, you can implement signed math in C without UB if you use unsigned types because overflow on unsigned types is defined.
Side note: this is another reason I won't touch Zig; UB on unsigned overflow is too high of a price to pay.