Java 的 int总是和处处都是一个32位有符号整数吗?
int
Yes, it's defined in The Java Language Specification.
From Section 4.2: Primitive Types and Values:
The integral types are byte, short, int, and long, whose values are 8-bit, 16-bit, 32-bit and 64-bit signed two's-complement integers, respectively, and char, whose values are 16-bit unsigned integers representing UTF-16 code units (§3.1).
byte
short
long
char
And additionally from Section 4.2.1: Integral Types and Values:
The values of the integral types are integers in the following ranges: For byte, from -128 to 127, inclusive For short, from -32768 to 32767, inclusive For int, from -2147483648 to 2147483647, inclusive For long, from -9223372036854775808 to 9223372036854775807, inclusive For char, from '\u0000' to '\uffff' inclusive, that is, from 0 to 65535
The values of the integral types are integers in the following ranges:
ints are 32 bits. Should you need more, longs are 64 bits.
Java 8 has added some support for unsigned integers.The primitive int is still signed, however some methods will interpret them as unsigned.
The following methods were added to the Integer class in Java 8:
Here is an example usage:
public static void main(String[] args) { int uint = Integer.parseUnsignedInt("4294967295"); System.out.println(uint); // -1 System.out.println(Integer.toUnsignedString(uint)); // 4294967295 }
As supplementary, if 64 bits long doesn't meet your requirement, try java.math.BigInteger.
It's suitable for the situations where the number is beyond the range of 64 bit long.
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); }
The output is:
The sum is: 18446744073709551614
The difference is: -18446744073709551615
The product is: -85070591730234615856620279821087277056
The quotient is: 1