あなたが欠けているものは次のとおりです。符号付き整数プリミティブ型(short、int、longなど)が表すことができる符号付き値よりもインクリメントされると、その符号ビットを反転しようとします。想定する数字の符号を示すのに使用されるd。符号ビットの1は負の値を示します。この現象を整数オーバーフローといいます。
疑似3ビット符号付きプリミティブデータ型を考えてみましょう(比較のために、Java longは64ビットです)。それは-4と3の間の数字を表すことができます。
3、3ビットの数を表すことができます最大の正の値は、次のようになります。011
011に1を追加し、あなたが得る:100
(番号部分は、符号部にオーバーフロー) 100の小数点以下のバージョンは-4
ですが、長さの容量を扱う場合は、数を数える必要があります。したがって、指定されていない非最適化で定義されている最大の数を簡単に判別できますシーケンス(この場合、階乗):
long n = 1;
while (factorial(n) > 0) {
System.out.println("factorial of " + n++ + " can fit in a long!");
}
これは無限ループでなければならないようですが、そうではありません。最終的に、階乗(n)は整数のオーバーフローのために負の値を返します。 これはあなたに次のような出力が得られます:
factorial of 1 can fit in a long!
factorial of 2 can fit in a long!
factorial of 3 can fit in a long!
factorial of 4 can fit in a long!
factorial of 5 can fit in a long!
factorial of 6 can fit in a long!
factorial of 7 can fit in a long!
factorial of 8 can fit in a long!
factorial of 9 can fit in a long!
factorial of 10 can fit in a long!
factorial of 11 can fit in a long!
factorial of 12 can fit in a long!
factorial of 13 can fit in a long!
factorial of 14 can fit in a long!
factorial of 15 can fit in a long!
factorial of 16 can fit in a long!
factorial of 17 can fit in a long!
factorial of 18 can fit in a long!
factorial of 19 can fit in a long!
factorial of 20 can fit in a long!
あなたが保持できる最大数とint型について何を知っている、これはあなたの宿題ですか? –
これは私の宿題ではなく、これは私の楽しい仕事です:)(私はオタクです)。私は宿題のためにこのような助けを求めることは決してありません。私はintが保持できる最大の数について何も知らない。私はドキュメントでそれを調べます。 – Toby
@ dann.dev: 'int'とは何ですか? – SLaks