凪瀬 Blog
Programming SHOT BAR

目次

Blog 利用状況
  • 投稿数 - 260
  • 記事 - 0
  • コメント - 46627
  • トラックバック - 192
ニュース
広告
  • Java開発者募集中
  • 経歴不問
  • 腕に自信のある方
  • 富山市内
  • (株)凪瀬アーキテクツ
アクセサリ
  • あわせて読みたい
凪瀬悠輝(なぎせ ゆうき)
  • Java技術者
  • お茶好き。カクテル好き。
  • 所属は(株)凪瀬アーキテクツ
  • Twitter:@nagise

書庫

日記カテゴリ

 

ちょっと軽めに数値リテラルのカクテルをどうぞ。

System.out.println(0120);
System.out.println(0xCafe);

出力結果は

80
51966

先頭に"0x"が付くと16進数表現になるのは有名ですが、先頭に0が付くと8進数になるのはマイナーです。
8進数は知らないと嵌るので記憶にとどめて置いてください。

System.out.println(5432l);
System.out.println(5432L);

結果は

5432
5432

末尾にアルファベットのエルをつけるとlongを表します。 大文字でも小文字でも同じなのですが、見ての通り、小文字の"l"は数字の"1"と見間違え易いので大文字を使いましょう。

System.out.println(12.);
System.out.println(12.0);
System.out.println(12d);
System.out.println(12f);

末尾にピリオドがつくとdouble値になります。2番目の小数表現もdouble値です。3番目のように末尾に"D"もしくは "d"をつけるとdoubleを表します。"F"もしくは"f"だとfloat値を表します。

System.out.println(12e0);
System.out.println(12e+0);
System.out.println(12e-0);

指数形式の表現も使えます。eの後ろに指数部を記述します。指数には+と-をつけることができます。

System.out.println(1e1);
System.out.println(1e0);
System.out.println(1e-1);

この場合の出力結果は

10.0
1.0
0.1

となります。

指数表現は16進数でも可能です。

System.out.println(0x1);
System.out.println(0x1p1);
System.out.println(0x1p0);
System.out.println(0x1p-1);

とこのように、16進数の後ろにpをつけて指数部を記述します。出力結果は

1
2.0
1.0
0.5

16進数の場合は指数は2進数での指数となるため、1で左シフト(<<演算子、要するに2倍)、 -1で右シフト(>>演算子、要するに1/2)となります。

目にする機会も少ないのですが、遭遇してうろたえないようにしておきましょう。

投稿日時 : 2007年8月1日 17:12
コメント
  • # re: 珍しい数値リテラルはいかが?
    melt
    Posted @ 2007/08/01 17:32
    12. の書き方と 16 進数の指数表現は初めて知りました。
    これでプログラムで作る顔文字の幅が広がりますね(違

    そういえばシフトで思い出したんですが、Java のシフト演算子は、例えば int の場合は n << 35 とかすると、実際には n << (35 % 32) ってシフトするんですよね。
    あれってすごい迷惑なんですけど、何か意味があるんでしょうか……。
  • # re: 珍しい数値リテラルはいかが?
    凪瀬
    Posted @ 2007/08/01 17:44
    うーん。「なぜそういう仕様なのか」という話は私も知りませんね。
    しかし、n << 35ということ自体がナンセンスとも言えるのですが、どうなんでしょう?0になるほうが嬉しいですか?
    そもそも桁あふれしちゃうわけで。
  • # re: 珍しい数値リテラルはいかが?
    melt
    Posted @ 2007/08/01 18:10
    先日、0 から n のビットが立ったマスク(0 <= n <= 31)を生成する場合に、
    int mask = (1 << (n + 1)) - 1;
    って書いたんですが、n = 31 の時に 0 が返ってきて、なんでだー!とか思って調べていくと↑のことに気が付いた訳です。
    そういう予想外の時間が取られたっていう経緯があるので迷惑だと思っているわけです。

    C とか C++ ばっかり使ってる自分にとっては、シフト演算子はシフトだけしてればいいんだー!ってな感じですw
  • # parseIntの挙動
    Kox Blog
    Posted @ 2007/08/23 11:26
    parseIntの挙動
タイトル
名前
Url
コメント