Timer using millis()

OK that makes sense and I very much appreciate the time you have spent explaining it.
I was aware that it happened but didn't know the mechanism.

I know that signed and unsigned ints have a different structure with the most significant bit holding the sign.
They are the same size but the signed version is 50% negative. (Possibly not the best way to phrase that, there must be a proper way)
Overflowing for addition or subtraction works in both cases.

It still leaves me with one question though ...

Why doesn't it work for bytes? or chars for that matter, which are signed bytes arn't they?

Al