That's why D has a cast keyword:
ubyte c = cast(ubyte)i;
instead of: unsigned char c = (unsigned char)i;
Casts are a blunt instrument that subvert the type system, and so they need to be greppable.Having the cast keyword also removes the grammatical ambiguities in the expression syntax.