class LongDiv{
public static void main(String [] args){
final long x = 24*60*60*1000*1000;
final long y = 24*60*60*1000;
System.out.println(x/y);
}
}
予想される答えは1000ですが、javacは5と答えます。理由は何ですか。
x
あなたが作成している長さは、あなたが期待した値ではありません。整数の範囲です。longを作成するには、以下を使用します。
final long x = 24L*60L*60L*1000L*1000L;
final long y = 24L*60L*60L*1000L;
System.out.println(x/y);
x
あなたは計算は、整数の範囲でした500654080
。これをy
(= 86400000
)で割ると、になり5.794607407407407...
ます。Javaは、5の原因となる小数部を切り捨てます。
L
数値リテラルの後にを追加することで、コンパイラにとしてではlong
なくとしてコンパイルするように指示しますint
。x
期待される値はです86400000000
。しかし、intとしてコンパイルされました。
x
(500654080
)の値をintに切り捨てることで、間違った値を再現できます。
// First correct
long x = 24L*60L*60L*1000L*1000L;
/* x = `86400000000`; */
// Now truncate
x &= 0xFFFFFFFFL; // again: don't forget the L suffix
/* x = `500654080` */
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加