Javaはintいつでもどこでも32ビットの符号付き整数になりますか?
回答:
一体タイプは
byte、short、int、およびlong、その値は8ビット、16ビット、32ビットおよび64ビットの符号付き2の補数の整数であり、それぞれ、そしてchar、その値がUTF-16コードを表す16ビットの符号なし整数でありますユニット(§3.1)。
さらにセクション4.2.1から:整数型と値:
整数型の値は、次の範囲の整数です。
- バイトの場合、-128から127まで
- 要するに、-32768から32767まで
- intの場合、-2147483648から2147483647まで
- 長い間、-9223372036854775808から9223372036854775807まで
- charの場合、「\ u0000」から「\ uffff」まで、つまり0から65535まで
Java 8では、符号なし整数のサポートが追加されています。プリミティブintは引き続き符号付きですが、一部のメソッドはそれらを符号なしとして解釈します。
以下のメソッドがIntegerクラスに追加されましたに。
使用例は次のとおりです。
public static void main(String[] args) {
int uint = Integer.parseUnsignedInt("4294967295");
System.out.println(uint); // -1
System.out.println(Integer.toUnsignedString(uint)); // 4294967295
}
補足として、64ビット長が要件を満たさない場合は、java.math.BigIntegerを試してください。。
数値が64ビット長の範囲を超えている状況に適しています。
public static void main(String args[]){
String max_long = "9223372036854775807";
String min_long = "-9223372036854775808";
BigInteger b1 = new BigInteger(max_long);
BigInteger b2 = new BigInteger(min_long);
BigInteger sum = b1.add(b1);
BigInteger difference = b2.subtract(b1);
BigInteger product = b1.multiply(b2);
BigInteger quotient = b1.divide(b1);
System.out.println("The sum is: " + sum);
System.out.println("The difference is: " + difference);
System.out.println("The product is: " + product);
System.out.println("The quotient is: " + quotient);
}
出力は次のとおりです。
合計は:18446744073709551614
違いは次のとおりです:-18446744073709551615
製品は:-85070591730234615856620279821087277056
商は次のとおりです:1
public static final int SIZE = 32;以降として指定されている定数Integer.SIZEです。