役に立つかどうかわりませんが。
# Shift JIS 限定の話です
Shift JIS は以下の三つの文字集合を使います。
(1) JIS X 0201 のラテン文字集合部分
(2) JIS X 0201 のカタカナ文字集合部分
(3) JIS X 0208 の文字集合
JIS がついているところから分かるように、これらは JIS規格で決まっています。
どのような文字が定義されているかというと、
(1) 1バイトのアルファベットや記号
(2) いわゆる半角カナ
(3) 2バイトのアルファベットや記号や漢字

これらに一文字ずつ区別がつくようにコードを振ることをエンコードといいます。
Shift JIS の場合、
(1) 0x21〜0x7E
(2) 0xA1〜0xDF
(3) 1バイト目 0x81〜0x9Fまたは0xE0〜0xFC、2バイト目 0x40〜0xFC(ただし0x7Fを除く)
となっています。ここから分かるのは
・(1)と(2)はすぐに区別が付く
ということです。これは Shift JIS が出来たときの事情がからんでいるのですが。
しかし、(3)に対しては
・1バイト目は(1)、(2)ともにかぶらない
・しかし2バイト目は(1)、(2)とかぶっている
という問題があります。
ですから、ある位置の1バイトが(3)の一部かどうか判定するには、
「0x40より大きくて、(3)の2バイト目と(1)(2)のどちらか区別が付かない場合は、
さらに一つ前の1バイトを読み込んで、(3)の1バイト目かどうかを調べる」
というのが正解です。