整数リテラル(Integer Literals)における接頭辞
【さっそく】
下記のコードについてのコンソール出力値がどうなるのか考えてみましょう。
class Prefixes {
public static void main(String[] arg) {
int x1 = 10; // 10 in decimal
int x2 = 012; // 10 in octal
int x3 = 0xA; // 10 in hexdecimal
System.out.println(x1);
System.out.println(x2);
System.out.println(x3);
}
}
コンソール出力:
10
10
10
出力値を見ると、どの変数にも整数として10が格納されていることがわかります。
なぜ初期値の記述が違うにもかかわらず、どの変数も10を格納しているのかというと
変数”x2”、”x3”はそれぞれ8進数、16進数の記述方法で初期化値が渡されているからです。
【Refresher】
int型変数に10進数以外の値を格納する場合の接頭辞についておさらいします。
- 10進数:接頭辞不要
- 2進数:扱う2進数の頭に0bを加える
- 8進数 - 扱う8進数の頭に0を加える
- 16進数 - 扱う16進数の頭に0xを加える
進数テーブル:
進数 | 接頭辞 |
---|---|
10 | なし |
2 | 0b |
8 | 0 |
16 | 0x |
【Example】
- 2進数:
class BinaryPrefix{
public static void main(String[] arg) {
int binary1 = 0b10;
System.out.println(binary1);
}
}
/*
Outputs:
2
*/
-
8進数:
8進数表記で8を記述しているためコンパイルエラーとなるコード
class OctalPrefix{
public static void main(String[] arg) {
int octal1 = 0801; // コンパイルエラー
System.out.println(binary1);
}
}
- 16進数:
class HexDecimal{
public static void main(String[] arg) {
int hexdecimal1 = 0xF;
System.out.println(hexdecimal1);
}
}
/*
Outputs:
15
*/
【関連英単語】
参考までに
これまで説明してきた接頭辞の由来となるギリシャ語、ラテン語の接頭辞、そしてこれらが使われている英単語を以下のテーブルにまとめましたので興味のある方はご覧ください。
ギリシャ | ラテン | 意味 | 英単語例 |
---|---|---|---|
Mono- | uni- | 1 | monotheism, universe, uniform, unicorn |
Di- | bi-du- | 2 | binary, duo |
Tri- | -tri | 3 | tripod, triple |
Tetra- | quadri- quart- | 4 | quarter |
Penta- | quin- | 5 | pentagon, quintet |
Hexa- | sext- | 6 | hexagon, sextet |
Hepta- | septem-, septi- | 7 | heptagon |
Octo- | octa-, oct- | 8 | octagon, octopus |
Ennea- | novem- | 9 | novena |
Deca- | deci-, decem- | 10 | decimal, decade |
Hemi- | semi- | half | hemisphere, semicircle, semifinal |
Poly- | multi- | many | polymorphism, polygon, polynomial |