>428-431
素直に書くなら
i = (b >= 0x80) ? (b - 0x100) : b
char型相手にまれにこんな処理も必要かな?

符号拡張の演算子でもなけりゃビット演算だけじゃ無理っぽい。