> > If the narrower type is signed it is probably even more confusing! > > The high bits will be preserved unless you are masking off bit 31. > > Yes. However, that case doesn't trigger with the normal case of small > values. So "~4" works fine with widening, in a way that "~4u" does > not.
Thinks ... converting: foo &= ~bar; to: foo = ~(~foo | bar); would generally DTRT. Whether the compiler has the relevant patterns to optimise it is another question. David