Javaを使うために改訂2版 パーフェクトJavaopen in new windowを読んだメモ

整数型

以下の5種類

namebit lengthminmax
byte8-128127
char16065535
short16-3276832767
int32-21474836482147483647
long64-92233720368547758089223372036854775807

bit値

符号あり整数で最上位ビットが1の値は負の値となる

4bit長の符号なし整数

typevaluebit
min00000
max151111

4bit長の符号あり整数

typevaluebit
min bit00000
max value70111
min value-81000
max bit-11111

桁あふれ

整数の加算はbit値を進める処理であり、

整数の減算はbit値を戻す処理である

したがってbitの境界値をまたいで整数の加算減算を行うと予期しない結果となる場合がある

int i = Interger.MAX_VALUE;
// i: 2147483647

i++
// i: -2147483648
1
2
3
4
5

整数リテラル

  • L または l で終わる整数リテラルの型は long
  • それ以外の整数リテラルは int
  • int 型リテラル値を bytecharshort の型の変数に代入する場合、値が代入する先の型の範囲内であれば自動的に型が変換されて代入される
    • 代入する先の型の範囲を超えている場合はコンパイルエラーとなる

基数

  • 0b から始めると 2 進数
  • 0 から始めると 8 進数
  • 0x から始めると 16 進数

整数の演算

四則演算

演算子演算
+
-
*
/

注意点

  • 大きな正の整数の和における桁あふれ
  • 小さな負の整数の差における桁あふれ
  • 絶対値の大きな整数同士の積の桁あふれ
  • 商の結果は切り捨て
  • 0 による割り算は ArithmeticException

剰余

  • 剰余演算子は %
  • 0 による剰余演算は ArithmeticException

符号反転

単項演算子 - は通常単純に符号を反転させる

int n = 10;
// -n: -10
1
2

しかしここにも桁あふれの問題があるので注意

int n = -2147483648;
// -n: -2147483648
1
2

仕様書open in new windowによると

-x equals (~x)+1

  • ~ は bit 反転演算子
  • -2147483648 は bit に変換すると 100...0(0 が 31 個つづく)
  • これを反転させると 011...1(1 が 31 個つづく)となり、これは 2147483647 を表す
  • 2147483647 + 1 は桁あふれが起こり、 -2147483648 となる

インクリメント・デクリメント

  • ++ でインクリメント
  • -- でデクリメント

キャスト

() 付きで型を書くことで強制的に型変換する

int i = 1;
short si = (short)i;
1
2

代入先の型に収まらないとあふれたbitが切り捨てられる

short si = (short)65536;
// si: 0
1
2
  • 65536 は bit に変換すると 100...0 (0 が 16 個つづく)
  • short 型は 16 bit なので先頭の 1 があふれる

ブーリアン(真偽値)

ブーリアン型が取りうる値は truefalse のみ

※ ド・モルガンの法則の説明等

参照

Last Updated:
Contributors: sojiro14