ではでは、ご挨拶後に初めてのネタ披露です。
堅苦しい説明にならないように留意します。。。
「あー、そんな雰囲気なのね」と感じていただけたら幸いです。
「あたりまえだろー」「間違ってる」・・・そんな意見も真摯に受け止めます。。。
今回のお題は「Literals」@C++です。
教科書は「ISO/IEC 14882:2003(E)」です。
難しく構える必要もなく、普段言ってる「文字リテラルが~」とかそんなやつですね。
ここを読んでくださってる方々は「ほら、あれでしょ。変数使わずに直接書くやつ。」とすぐに説明できると思いますが、具体的にどんなもんだよと書いてあるのか観てみましょう。
教科書を紐解く前に「Literal」で辞書を見ると、
(1)文字[字義]どおりの
(2)事実に忠実な, 誇張のない
(3)正真正銘の, まったくの
(4)文字(上)の, 文字で表現された;アルファベットの
でした。(4)が適当な感じですね。
で、どんなのがあるかというと、
---------------------------------------------------------------
There are several kinds of literals.
literal:
integer-literal
character-literal
floating-literal
string-literal
boolean-literal
---------------------------------------------------------------
(1)整数リテラル
(2)文字リテラル
(3)浮動小数リテラル
(4)文字列リテラル
(5)真理値リテラル
こんなんがあると謳っています。
今回は飲みながら書いているというのもあるので(笑)(1)の整数リテラルについてのみ・・・
---------------------------------------------------------------
2.13.1 Integer literals [lex.icon]
integer-literal:
decimal-literal integer-suffixopt
octal-literal integer-suffixopt
hexadecimal-literal integer-suffixopt
decimal-literal:
nonzero-digit
decimal-literal digit
octal-literal:
0
octal-literal octal-digit
hexadecimal-literal:
0x hexadecimal-digit
0X hexadecimal-digit
hexadecimal-literal hexadecimal-digit
nonzero-digit: one of
1 2 3 4 5 6 7 8 9
octal-digit: one of
0 1 2 3 4 5 6 7
hexadecimal-digit: one of
0 1 2 3 4 5 6 7 8 9
a b c d e f
A B C D E F
integer-suffix:
unsigned-suffix long-suffixopt
long-suffix unsigned-suffixopt
unsigned-suffix: one of
u U
long-suffix: one of
l L
---------------------------------------------------------------
C/C++を解る人は「あー」って感じだと思います。。。
---------------------------------------------------------------
integer-literal:
decimal-literal integer-suffix(opt)
octal-literal integer-suffix(opt)
hexadecimal-literal integer-suffix(opt)
---------------------------------------------------------------
整数リテラルは、
・10進リテラル+サフィックス(サフィックスはオプション)
・8進リテラル+サフィックス(サフィックスはオプション)
・16進リテラル+サフィックス(サフィックスはオプション)
ということです。以下、そのことについての説明です。
---------------------------------------------------------------
decimal-literal:
nonzero-digit
decimal-literal digit
---------------------------------------------------------------
10進リテラルは、
・nonzero-digit:非0の10進が先頭で、
・decimal-literal digit:後の数値は10進
になります。
よく重箱の隅をつつくような話で、
「C言語に10進の0は無い(先頭が0は8進表記だから)」
なんてのがありますが、この辺のお話ですね。
---------------------------------------------------------------
octal-literal:
0
octal-literal octal-digit
---------------------------------------------------------------
8進リテラルは,
・0:先頭が0
・octal-literal:8進数値
になります。
はい、そこの新入社員さん、
const int NUMBER_A = 1234;
const int NUMBER_B = 0234;
なんて揃えて迷惑をかけないように。。。
---------------------------------------------------------------
hexadecimal-literal:
0x hexadecimal-digit
0X hexadecimal-digit
hexadecimal-literal hexadecimal-digit
---------------------------------------------------------------
16進リテラルは、
・0x hexadecimal-digit:0xが先頭に付加された数値
・0X hexadecimal-digit:0xが先頭に付加された数値
・hexadecimal-literal hexadecimal-digit:0xや0Xで始まる16進数値の連続
になります。
シフト押すのが面倒くさいのと、慣れで「0x」派でした。。。
---------------------------------------------------------------
nonzero-digit: one of
1 2 3 4 5 6 7 8 9
---------------------------------------------------------------
これは簡単ですね。
nonzero-digit:非ゼロの数値、1~9です。
---------------------------------------------------------------
octal-digit: one of
0 1 2 3 4 5 6 7
---------------------------------------------------------------
octal-digit:8進の数値・・・当然0~7までですね。
---------------------------------------------------------------
hexadecimal-digit: one of
0 1 2 3 4 5 6 7 8 9
a b c d e f
A B C D E F
---------------------------------------------------------------
hexadecimal-digit:16進は・・・見ての通りですね(笑)
0~9、a~f、A~Fです。
---------------------------------------------------------------
integer-suffix:
unsigned-suffix long-suffix(opt)
long-suffix unsigned-suffix(opt)
---------------------------------------------------------------
整数リテラルに付加可能なサフィックスは、
unsigned-suffix long-suffix(opt):正負サフィックス+longサフィックス(オプション)
long-suffix unsigned-suffixopt:longサフィックス+正負サフィックス(オプション)
となります。
正負サフィックスとlongサフィックスについては以下・・・
---------------------------------------------------------------
unsigned-suffix: one of
u U
---------------------------------------------------------------
unsigned-suffix:正負のサフィックスは[u][U]のどちらか
ですね~。
なぜか小文字の[u]のほうはクセで使わないかも。。。
---------------------------------------------------------------
long-suffix: one of
l L
---------------------------------------------------------------
long-suffix:longのサフィックスは[l][L]のどちらか
ですね~。
こちらも小文字の[l]のほうはクセで使わないかも。。。
これらをきちんと把握していれば・・・整数リテラルマスター(笑)
はい、ここから文章に入ります(笑)
---------------------------------------------------------------
An integer literal is a sequence of digits that has no period or exponent part. An integer literal may have a
prefix that specifies its base and a suffix that specifies its type. The lexically first digit of the sequence of
digits is the most significant. A decimal integer literal (base ten) begins with a digit other than 0 and consists
of a sequence of decimal digits. An octal integer literal (base eight) begins with the digit 0 and consists
of a sequence of octal digits.22) A hexadecimal integer literal (base sixteen) begins with 0x or 0X and
consists of a sequence of hexadecimal digits, which include the decimal digits and the letters a through f
and A through F with decimal values ten through fifteen. [Example: the number twelve can be written 12,
014, or 0XC. ]
---------------------------------------------------------------
・An integer literal is a sequence of digits that has no period or exponent part.
まぁ、これは当然ですね。
>sequence of digits
数値が連続(sequence)していないと困ります。。。 999 123 と間が空いては解りません。
>no period or exponent part
これもそうですね・・・小数点が入ったら(period)整数ではないですし、指数部(exponent part)が入っても整数ではないです。
・An integer literal may have a prefix that specifies its base and a suffix that specifies its type.
>a prefix that specifies its base
接頭辞がリテラルの基礎を決めるんですね。8進or10進or16進を。
>a suffix that specifies its type
サフィックスがunsignedだったりlongであることを示すんですね。
・A decimal integer literal (base ten) begins with a digit other than 0 and consists of a sequence of decimal digits.
10進リテラルは0以外の数値から始まる数値の連続です。
・An octal integer literal (base eight) begins with the digit 0 and consists of a sequence of octal digits.22)
8進リテラルは0から始まる8進数値(0~7)の連続です。
・A hexadecimal integer literal (base sixteen) begins with 0x or 0X and consists of a sequence of hexadecimal digits,which include the decimal digits and the letters a through f and A through F with decimal values ten through fifteen. [Example: the number twelve can be written 12,014, or 0XC. ]
16進リテラルは0x,0Xから始まる16進数値(0~9,a~f,A~F)の連続です。
うーん、飲んだ勢いでここまで書いたけど・・・
「これを面白がってくれる人がいるのか」
なんて悩んでしまいました・・・とは言っても普段は仕事のある身、書くのに時間をかけられず・・・とりあえずアップ><
大丈夫、スタイルなんて後からできていくから・・・多分。まぁいいや、流浪流浪っと・・・
ハ_ハ
('(゚∀゚∩ なんとかなるよ!
ヽ 〈
ヽヽ_)
・今日の単語
decimal:10進の
octal:8進の
hexadecimal:16進の
digit;0~9の数値
prefix:接頭辞
suffix:接尾辞