「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. 整数リテラル
整数リテラル(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. 演算子]]
*[[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. 演算子]]
表示オプション
横に並べて表示:
変化行の前後のみ表示: