dポイントプレゼントキャンペーン実施中!

 サロゲートペアは4ケタの16進数を2個、つまり16進数8文字で
ユニコードの第1面以降のコードポイントを指定するはずなのに
IMEパッドで出てくるコードポイントは「

A 回答 (2件)

UTF-16 において、Unicode 第2面・追加漢字面を表現するには、以下の計算式を使います。



上位サロゲート = 0xD800 + (code-0x10000 >> 10)
下位サロゲート = 0xDC00 + (code-0x10000 & 0x3FF)

この 0x10000 の減算ですが、コードの効率化のために行います。

サロゲートペアで表現できる文字コード範囲は
上位サロゲート10bit+下位サロゲート10bit = 20bit -> 16面分

もし減算しないならば、サロゲートペアで表現できる範囲は 第0-15面 ですが、
そもそも 第0面 はサロゲートペアを使うまでもないので、
除算することにより 第1-16面 を表現できるようにしています。

これにより UTF-16 で表現できる文字コード範囲は
2^16(第0面) - 2^11(サロゲートペア分) + 2^16*16(第1-16面) = 1,112,064
減算しない場合より 1面分だけお得となっております。


ご質問の
> 1番左の桁を"2"から"1"にする。これをXとする。
は、要するに「0x10000で減算する」を回りくどく説明しているだけなので、
> しかし、5文字の1番左は必ず「5」なんでしょうか?
少々ずれた回答になりますが、必ず「0x10000」です。
    • good
    • 0

>しかし、5文字の1番左は必ず「5」なんでしょうか?


​​は、
>しかし、5文字の1番左は必ず「2」なんでしょうか?
の間違いですかね?
​​
あなたが読んだページは、5桁目が2の場合について書いてあったのでしょう。
一般的には、0x10000を引いてください。

この回答への補足

すみません「5」ではなく「2」の間違いでした。

補足日時:2014/01/09 18:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!