表紙
/
自作ソフト
/
日記
/
宝箱
/
サイト情報
/
検索
一般 / 新C言語 / 駄文 |
| |
|
|
3.1 ユニバーサルキャラクタ名 今までの C 言語では、文字列や文字定数の中に直接文字コードの値を指定することが可能でした。例えば、"\x0d\x0a" や '\0' のような記述方法です。しかし、C 言語が wchar_t といったワイドキャラクタを含むように拡張された後、wchar_t の文字コードを直接指定する方法は決められていませんでした。 今度の C 言語ではその方法が規定され記述できるようになりました。文字コードとしては ISO/IEC 10646、 いわゆる UNICODE が想定されています。この記述法は仕様ではユニバーサルキャラクタ名(universal character name)と名づけられており、プログラミング言語 Java での記述によく似ています。具体的な記述方法は次の通りです。
ところで、サロゲート(surrogate)って知ってますか? UNICODE は世界中のすべての文字を 16 bit の中に入れようとして作っていました。しかし、わかっていたことではありますが、やはり 16 bit にすべて押し込むことは無理でした。そこで仕方が無いのである特定の文字部分ではさらにもう一文字追加して、32 bit で一文字をあらわすことにしました。その特定の領域の部分をサロゲートといい、それを使った文字をサロゲートペアによる指定などといいます。 3.2 拡張された識別名使用文字 従来の C 言語では識別名として使用できる文字は、アルファベットの大文字、小文字、数字(ただし識別名の先頭以外)、_ という文字に制限されていました。従って、日本語で使用される文字を使った識別名(例えば、「処理フラグ」)などは使用することができませんでした。 しかし、新しい C 言語ではユニバーサルキャラクタ名と実装依存のマルチバイト文字を使用することができるようになりました。例えば、「\u51e6\u7406\u30d5\u30e9\u30b0」といった識別名や、実装者が許せば「処理フラグ」といったマルチバイト識別名を利用することが可能になったのです。ただし、その場合でも先頭の文字が数字であってはいけません。 3.3 浮動小数点定数の 16 進数表記 計算機で浮動小数点数を扱うと必ず誤差の問題が付きまといます。例えば 10 進数の 0.1 という数値は、2進数では循環小数 0.0[0011] (0011 の部分を永遠に繰返す)となり、正確に 0.1 という値をあらわすことがきません。コンパイラなどの言語処理系は 10 進数で書かれた浮動小数点数を 2 進数に変換するので、このときの変換アルゴリズムにより、表現している値が微妙に変化してしまうことがあります。これは 10 進数から 2 進数への変換を処理系に任せることにより起こっている問題です。したがって、直接 2 進表現で浮動小数点定数を記述できれば、この問題はなくなります。 今度の C 言語では、16 進数で浮動小数点定数を記述できるようになります。書き方は、0xaaaa.ccccP+10 のように記述します。aaaa の部分には 16 進数で整数部分を、cccc の部分には 16 進数で小数部分を、P の後ろには指数(2 のべき乗)を 10 進数で書きます。P は小文字 p でも許されており、また p の後ろには符号 + か - の記述も許されています。16 進整数定数と間違えないようにするため、この指数部は省略することができないので必要がないときも必ず 0x1234P0 のように記述する必要があります。0x1234P0f や 0x1234P0FL のように明示的に浮動小数点定数であることを示すこともできます。 この表記を printf を使って表示するには、「a」または「A」を変換指定子として指定します。小文字の「a」を使ったときには、0x1.2345p+10 のように、「x」と「p」が小文字で表示されます。大文字の「A」を使ったときには、0X1.2345P+10 のように、「X」と「P」が大文字で表示されます。 scanf で読み取るときには「a」を変換指定子として指定します。 |
|
| ||||
表紙
-
著作権
-
注意事項
-
リンクについて
-
404 エラーについて
(c)1999-2014 seclan. All rights reserved. |