JIS漢字コードをシフトJISコードや区点コードに変換する計算方法

シフトJISコードが、アスキーコードにカタカナを加えたいわゆる半角文字と呼ばれる1バイトコードと併用できるのは、1バイトコードの空きである81〜9Fの31個分と、E0〜EFの16個分の合計47個分をシフトJISコードの第1バイトとして使い、JISコードの第1バイトである21〜7Eの94個分を2で割った47個分として割り当てているから。
JISコードの第1バイトを2で割った都合上、第1バイトが奇数(0x21で始まるので)の場合の第2バイトの21〜7Eの94個分と、第1バイトが偶数の場合の第2バイトの21〜7Eの94個分の合計188個分が必要になるので、シフトJISの第2バイトは1バイトコードの英大文字や英小文字を含む40〜7Eの63個分と、80〜9Eの31個分の合計94個分を第1バイトが奇数の場合の第2バイトとして、カタカナを含む9F〜FCの94個分を第1バイトが偶数の場合の第2バイトとして使っている。
実際の変換手順としては以下の通り

  1. JISコードの第1バイトから0x21を引いて2で割って0x81を足す、0xa0以上なら0x40を足す
  2. JISコードの第2バイトから0x21を引く
  3. JISコードの第1バイトが奇数なら0x40を足す、0x7eを超えていれば1を足す
  4. JISコードの第1バイトが偶数なら0x9fを足す

ついでにJISコードから区点コードへの変換方法も確認しておく。JISコードの第1バイト(21〜7E)から0x20を引いて10進数にした1〜94が区、第2バイト(21〜7E)から0x20を引いて10進数にした1〜94が点になっている。