Implicit conversion of unsigned char (arithmetic conversion vs. assignment)
===

In am working on something and came across code similar to the following:

    #define MODULUS(a,b)        ((a) >= 0 ? (a)%(b) : (b)-(-a)%(b))

    unsigned char w;
    unsigned char x;
    unsigned char y;
    char z;

    /* Code that assigns values to w,x and y.  All values assigned 
       could have been represented by a signed char. */

    z = MODULUS((x - y), w);

It is my understanding that the arithmetic `(x - y)` will be accomplished prior to any type conversion and the macro will always evaluate to `(a)%(b)` -- as the result will be an unsigned char which is always greater than or equal to zero.  However, the code functions as intended and I think that my understanding is flawed.  So...

My questions are these:

1.  Does an implicit type conversion to signed char occur before the expression is evaluated?

2.  Is there a situation (for example, if the unsigned values were large enough that they could not be represented by a signed value) where the above code would not work?