David, all this is very nice and I was indeed quite explicit about signed etc. in all my posts.
HOWEVER, your statement that $ffff*$ffff - both unsigned - results in a 32 bit overflow is wrong - the result is $fffe0001, a perfectly well 32 bit representable unsigned number. Expecting a signed result from the multiplication of two unsigned operands would be a laughable idea but in that case it would overflow indeed. I leave it to you to clarify how the C language would do this by default(unsigned16*unsigned16 -> ???32), I just don't know (nor am I particularly interested in).