akios @ ウィキ

3.10.1. 整数リテラル

最終更新:

akios

- view
管理者のみ編集可

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. 整数リテラル

整数リテラル(integer literal)は10進、16進、8進、2進のいずれかで表記することができます。

IntegerLiteral:
  DecimalIntegerLiteral
  HexIntegerLiteral
  OctalIntegerLiteral
  BinaryIntegerLiteral

DecimalIntegerLiteral:
  DecimalNumeral IntegerTypeSuffixopt

HexIntegerLiteral:
  HexNumeral IntegerTypeSuffixopt

OctalIntegerLiteral:
  OctalNumeral IntegerTypeSuffixopt

BinaryIntegerLiteral:
  BinaryNumeral IntegerTypeSuffixopt

IntegerTypeSuffix: one of
  l L
末尾にASCII文字でlもしくはLが付いていればその整数リテラルはlong型です。それ以外ならそれはint型です(4.2.1.)。

末尾文字はLが推奨されます。文字lは数字の1と見間違いやすいからです。

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

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

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

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

DecimalNumeral:
  0
  NonZeroDigit Digitsopt
  NonZeroDigit Underscores Digits

Digits:
  Digit
  Digit DigitsAndUnderscoresopt Digit

Digit:
  0
  NonZeroDigit

NonZeroDigit: one of
  1 2 3 4 5 6 7 8 9

DigitsAndUnderscores:
  DigitOrUnderscore
  DigitsAndUnderscores DigitOrUnderscore

DigitOrUnderscore:
  Digit
  _

Underscores:
  _
  Underscores _

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

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

HexNumeral:
  0 x HexDigits
  0 X HexDigits

HexDigits:
  HexDigit
  HexDigit HexDigitsAndUnderscoresopt HexDigit

HexDigit: one of
  0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F

HexDigitsAndUnderscores:
  HexDigitOrUnderscore
  HexDigitsAndUnderscores HexDigitOrUnderscore

HexDigitOrUnderscore:
  HexDigit
  _

上記のHexDigitの生成規則は3.3.からきています。

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

OctalNumeral:
  0 OctalDigits
  0 Underscores OctalDigits

OctalDigits:
  OctalDigit
  OctalDigit OctalDigitsAndUnderscoresopt OctalDigit

OctalDigit: one of
  0 1 2 3 4 5 6 7

OctalDigitsAndUnderscores:
  OctalDigitOrUnderscore
  OctalDigitsAndUnderscores OctalDigitOrUnderscore

OctalDigitOrUnderscore:
  OctalDigit
  _

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

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

BinaryNumeral:
  0 b BinaryDigits
  0 B BinaryDigits

BinaryDigits:
  BinaryDigit
  BinaryDigit BinaryDigitsAndUnderscoresopt BinaryDigit

BinaryDigit: one of
  0 1

BinaryDigitsAndUnderscores:
  BinaryDigitOrUnderscore
  BinaryDigitsAndUnderscores BinaryDigitOrUnderscore

BinaryDigitOrUnderscore:
  BinaryDigit
  _

int型の10進リテラルの最大値は2147483648(231)です。

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

2147483648(231)を超えるint型の10進リテラルや単項マイナス演算子オペランド以外での2147483648はコンパイルエラーとなります。

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

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

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

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

long型の10進リテラルの最大値は9223372036854775808L(263)です。

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

9223372036854775808L(263)を超えるlong型の10進リテラルや単項マイナス演算子オペランド以外での9223372036854775808Lはコンパイルエラーとなります。

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

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

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

int型リテラルの例:
0  2  0372  0xDada_Cafe  1996  0x00_FF__00_FF

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. 演算子

目安箱バナー