[1798] Re:char hoge = 'A';
投稿者:774RR
2012/02/28 09:42:53
出遅れ気味...
C++ の場合は仕様書の文言が若干違うようです。
以下 ISO/IEC 14882:1998 ならびに JIS X3014:2003 から
2.2 - 3 基本実行文字集合
基本実行文字集合において、それぞれの文字は非負の互いに異なる値をもっていなければならない。
実行文字集合は、基本実行文字集合をその部分集合とする集合とする。
実行文字集合における文字の値は、処理系定義とする。
俺:この文言は [基本文字集合は非負の値] [基本でない文字集合は負でもよい] と読むべきなのだろう・・・
2.13.2 文字リテラル
文字リテラルは型 char をもち、実行文字集合での符号数値に等しい値を持つ。
俺:C の 6.4.4.4 の例のような文言は無いな・・・
3.9.1 基本型
char として宣言されたオブジェクトの大きさは、処理系定義である実行文字集合のすべての要素を
格納するのに十分なだけ大きくなければならない。
char オブジェクトが負の値をもてるか否かは、処理系定義とする
EBCDIC およびその派生な文字セットの場合 'A'=h'C1, '0'=h'F0 なので、
[基本文字集合は非負の値] からいくと「単なる char は符号なし」しかダメなんだろう。
ただ、実処理系で確認しようにもいろいろ微妙かも。
すぐ使える場所に EBCDIC な処理系は無いし
printf("%d\n", '\xF0'); とすると [汎整数拡張] 後の int 型の値確認にしかならないし
cout << '\xF0'; だと[文字表記]になって[文字の値]ではないし
cout << int('\F0'); だと同 int の確認だし