(c >= 0x81 && c <= 0x9F) || (c >= 0xE0 && c <= 0xFC))
ここから、t = c ^ 0x20として
t >= 0xA1 && t <= 0xDC
を見つけるのは勘と言って差し支えないかも。自分もこんなの無理。

ちなみに、負の値をunsigned charに変換すると256 + (基の値)となる。
例えば、(unsigned char)-1 == 256 + (-1)、つまり255。
これを使って、元の判定式では0以上というチェックを省くということをやっている。