「3.10.1. 整数リテラル」の編集履歴(バックアップ)一覧に戻る

3.10.1. 整数リテラル - (2012/09/05 (水) 22:41:04) のソース

*[[3. 字句構造]]
**[[3.1. Unicode]]
**[[3.2. 字句変換]]
**[[3.3. Unicodeエスケープ]]
**[[3.4. 行終端子]]
**[[3.5. 入力要素とトークン]]
**[[3.6. 空白]]
**[[3.7. コメント]]
**[[3.8. 識別子]]
**[[3.9. キーワード]]
**[[3.10. リテラル]]
***3.10.1. 整数リテラル
&i(){整数リテラル(integer literal)}は10進、16進、8進、2進のいずれかで表記することができます。

#divstyle(background-color:#f0f0f0;border:1px solid red;padding 4px){

&i(){IntegerLiteral}:
  &i(){DecimalIntegerLiteral}
  &i(){HexIntegerLiteral}
  &i(){OctalIntegerLiteral}
  &i(){BinaryIntegerLiteral}

&i(){DecimalIntegerLiteral}:
  &i(){DecimalNumeral} &i(){IntegerTypeSuffix&sub(){opt}}

&i(){HexIntegerLiteral}:
  &i(){HexNumeral} &i(){IntegerTypeSuffix&sub(){opt}}

&i(){OctalIntegerLiteral}:
  &i(){OctalNumeral} &i(){IntegerTypeSuffix&sub(){opt}}

&i(){BinaryIntegerLiteral}:
  &i(){BinaryNumeral} &i(){IntegerTypeSuffix&sub(){opt}}

&i(){IntegerTypeSuffix}: one of
  &tt(){l} &tt(){L}

}
末尾にASCII文字で&tt(){l}もしくは&tt(){L}が付いていればその整数リテラルはlong型です。それ以外ならそれはint型です(&link_anchor(4.2.1. 整数型と値,page=4.2. プリミティブ型と値){4.2.1.})。 

&i(){&small(){末尾文字は&tt(){L}が推奨されます。文字&tt(){l}は数字の1と見間違いやすいからです。}}

整数の桁を区切るのにアンダースコアを使用できます。

16進数や2進数のリテラルの場合、整数は文字&tt(){0x}や&tt(){0b}の直後から型接尾語の前までにしか書くことができません。このため、アンダースコアは&tt(){0x}や&tt(){0b}の直後や最後の桁の直後には使用できません。

10進数や8進数のリテラルの場合、整数は型接尾語の前にまでにしか書くことが出来ません。このため、アンダースコアは最初の桁より前や最後の桁の直後には使用できません。8進数の場合、最初の&tt(){0}(整数の一部とみなせる)の直後からアンダースコアを使用することはできます。ゼロ以外の10進数リテラルの場合、最初のゼロ以外の数字の後にアンダースコアを使用することができます。

10進数は整数のゼロを表す単一のASCII文字&tt(){0}か、正の整数を表すASCII文字&tt(){1}~&tt(){9}に0個以上のASCII文字&tt(){0}~&tt(){9}(アンダースコアを含む)が続く表記のいずれかです。

#divstyle(background-color:#f0f0f0;border:1px solid red;padding 4px){

&i(){DecimalNumeral}:
  &tt(){0}
  &i(){NonZeroDigit} &i(){Digits&sub(){opt}}
  &i(){NonZeroDigit} &i(){Underscores} &i(){Digits}

&i(){Digits}:
  &i(){Digit}
  &i(){Digit} &i(){DigitsAndUnderscores&sub(){opt}} &i(){Digit}

&i(){Digit}:
  &tt(){0}
  &i(){NonZeroDigit}

&i(){NonZeroDigit}: one of
  &tt(){1 2 3 4 5 6 7 8 9}

&i(){DigitsAndUnderscores}:
  &i(){DigitOrUnderscore}
  &i(){DigitsAndUnderscores} &i(){DigitOrUnderscore}

&i(){DigitOrUnderscore}:
  &i(){Digit}
  &tt(){_}

&i(){Underscores}:
  &tt(){_}
  &i(){Underscores} &tt(){_}

}

16進数は先頭にASCII文字&tt(){0x}もしくは&tt(){0X}があり続く1つ以上のASCII文字16進数(アンダースコアを含む)で表され、正、ゼロ、負のいずれかの整数を表します。

16進数の10から15の値はASCII文字の&tt(){A}から&tt(){F}もしくは&tt(){a}から&tt(){f}によってそれぞれ表します。大文字小文字問いません。

#divstyle(background-color:#f0f0f0;border:1px solid red;padding 4px){

&i(){HexNumeral}:
  &tt(){0} &tt(){x} &i(){HexDigits}
  &tt(){0} &tt(){X} &i(){HexDigits}

&i(){HexDigits}:
  &i(){HexDigit}
  &i(){HexDigit} &i(){HexDigitsAndUnderscores&sub(){opt}} &i(){HexDigit}

&i(){HexDigit}: one of
  &tt(){0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F}

&i(){HexDigitsAndUnderscores}:
  &i(){HexDigitOrUnderscore}
  &i(){HexDigitsAndUnderscores} &i(){HexDigitOrUnderscore}

&i(){HexDigitOrUnderscore}:
  &i(){HexDigit}
  &tt(){_}

}

&i(){&small(){上記の&i(){HexDigit}の生成規則は[[3.3.>3.3. Unicodeエスケープ]]からきています。}}

8進数は先頭にASCII数字&tt(){0}があり続く1つ以上のASCII数字&tt(){0}から&tt(){7}(アンダースコアを含む)で表され、正、ゼロ、負のいずれかの整数を表します。

#divstyle(background-color:#f0f0f0;border:1px solid red;padding 4px){

&i(){OctalNumeral}:
  &tt(){0} &i(){OctalDigits}
  &tt(){0} &i(){Underscores} &i(){OctalDigits}

&i(){OctalDigits}:
  &i(){OctalDigit}
  &i(){OctalDigit} &i(){OctalDigitsAndUnderscores&sub(){opt}} &i(){OctalDigit}

&i(){OctalDigit}: one of
  &tt(){0 1 2 3 4 5 6 7}

&i(){OctalDigitsAndUnderscores}:
  &i(){OctalDigitOrUnderscore}
  &i(){OctalDigitsAndUnderscores} &i(){OctalDigitOrUnderscore}

&i(){OctalDigitOrUnderscore}:
  &i(){OctalDigit}
  &tt(){_}

}

&i(){&small(){8進数は常に2桁以上の数字で構成されます。&tt(){0}は常に10進数とみなされすが、数値&tt(){0}、&tt(){00}、&tt(){0x0}は全て全く同じ整数値を表しているため、実質上問題になりません。}}

2進数は先頭にASCII文字&tt(){0b}もしくは&tt(){0B}があり続く1つ以上のASCII数字&tt(){0}もしくは&tt(){1}(アンダースコアを含む)で表され、正、ゼロ、負のいずれかの整数を表します。

#divstyle(background-color:#f0f0f0;border:1px solid red;padding 4px){

&i(){BinaryNumeral}:
  &tt(){0} &tt(){b} &i(){BinaryDigits}
  &tt(){0} &tt(){B} &i(){BinaryDigits}

&i(){BinaryDigits}:
  &i(){BinaryDigit}
  &i(){BinaryDigit} &i(){BinaryDigitsAndUnderscores&sub(){opt}} &i(){BinaryDigit}

&i(){BinaryDigit}: one of
  &tt(){0 1}

&i(){BinaryDigitsAndUnderscores}:
  &i(){BinaryDigitOrUnderscore}
  &i(){BinaryDigitsAndUnderscores} &i(){BinaryDigitOrUnderscore}

&i(){BinaryDigitOrUnderscore}:
  &i(){BinaryDigit}
  &tt(){_}

}

&tt(){int}型の10進リテラルの最大値は&tt(){2147483648(2&sup(){31})}です。

&tt(){int}型リテラルを記述できる場所ならどこでも&tt(){0}から&tt(){2147483647}までの10進リテラルを書くことができます。

&bold(){&tt(){2147483648(2&sup(){31})}を超える&tt(){int}型の10進リテラルや[[単項マイナス演算子>15.15.4. 単項マイナス演算子-]]オペランド以外での&tt(){2147483648}はコンパイルエラーとなります。}

&tt(){int}型正の最大値である10進数で&tt(){2147483647(2&sup(){31}-1)}を16進、8進、2進リテラルで表すと、それぞれ以下の通りです。:
-&tt(){0x7fff_ffff}
-&tt(){0177_7777_7777}
-&tt(){0b0111_1111_1111_1111_1111_1111_1111_1111}

&tt(){int}型負の最大値である10進数で&tt(){-2147483648(2&sup(){31})}を16進、8進、2進リテラルで表すと、それぞれ以下の通りです。:
-&tt(){0x8000_0000}
-&tt(){0200_0000_0000}
-&tt(){0b1000_0000_0000_0000_0000_0000_0000_0000}

10進数&tt(){-1}を16進、8進、2進リテラルで表すと、それぞれ以下の通りです。:
-&tt(){0xffff_ffff}
-&tt(){0377_7777_7777}
-&tt(){0b1111_1111_1111_1111_1111_1111_1111_1111}

&bold(){&tt(){int}型リテラルで32ビットを超える16進、8進、2進リテラルはコンパイルエラーとなります。}

&tt(){long}型の10進リテラルの最大値は&tt(){9223372036854775808L(2&sup(){63})}です。

&tt(){long}型リテラルを記述できる場所ならどこでも&tt(){0L}から&tt(){9223372036854775807L}までの10進リテラルを書くことができます。

&bold(){&tt(){9223372036854775808L(2&sup(){63})}を超える&tt(){long}型の10進リテラルや[[単項マイナス演算子>15.15.4. 単項マイナス演算子-]]オペランド以外での&tt(){9223372036854775808L}はコンパイルエラーとなります。}

&tt(){long}型正の最大値である10進数で&tt(){9223372036854775807L(2&sup(){63}-1)}を16進、8進、2進リテラルで表すと、それぞれ以下の通りです。:
-&tt(){0x7fff_ffff_ffff_ffffL}
-&tt(){07_7777_7777_7777_7777_7777L}
-&tt(){0b0111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L}

&tt(){long}型負の最大値である10進数で&tt(){-9223372036854775808L(2&sup(){63})}を16進、8進、2進リテラルで表すと、それぞれ以下の通りです。:
-&tt(){0x8000_0000_0000_0000L}
-&tt(){010_0000_0000_0000_0000_0000L}
-&tt(){0b1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000L}
10進数&tt(){-1L}を16進、8進、2進リテラルで表すと、それぞれ以下の通りです。:
-&tt(){0xffff_ffff_ffff_ffffL}
-&tt(){•017_7777_7777_7777_7777_7777L}
-&tt(){0b1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L}

&bold(){&tt(){long}型リテラルで64ビットを超える16進、8進、2進リテラルはコンパイルエラーとなります。}

#divstyle(background-color:#f0f0ff;border:1px solid black;padding 4px){

&i(){&small(){&tt(){int}型リテラルの例:}}
 0  2  0372  0xDada_Cafe  1996  0x00_FF__00_FF

&i(){&small(){&tt(){long}型リテラルの例:}}
 0l  0777L  0x100000000L  2_147_483_648L  0xC0B0L

}

***[[3.10.2. 浮動小数点リテラル]]
***[[3.10.3. ブールリテラル]]
***[[3.10.4. 文字リテラル]]
***[[3.10.5. 文字列リテラル]]
***[[3.10.6. 文字・文字列リテラル用のエスケープシーケンス]]
***[[3.10.7. ヌルリテラル]]
**[[3.11. 分離子]]
**[[3.12. 演算子]]
目安箱バナー