Java int总是32位?
将Java的int
总是和无处不在是一个32位有符号整数?
是的,它在“Java语言规范”中定义。
从第4.2节:原始types和值 :
整数types是
byte
,short
,int
和long
,它们的值分别是8位,16位,32位和64位带符号的二进制补码整数,char
的值是16位无符号整数代表UTF-16代码单元(§3.1)。
另外从第4.2.1节:积分types和值 :
积分types的值是以下范围的整数:
- 对于字节,从-128到127(含)
- 简而言之,从-32768到32767,包括在内
- 对于int,从-2147483648到2147483647(含)
- 长期以来,从-9223372036854775808到9223372036854775807,包括在内
- 对于char,从'\ u0000'到'\ uffff'(含),即从0到65535
int
s是32位。 如果你需要更多, long
64位。
作为补充,如果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
Java 8为无符号整数添加了一些支持。原始的int
仍然是有符号的,但有些方法会将它们解释为无符号的。
以下方法被添加到Java 8中的Integer类中:
- compareUnsigned(int x,int y)
- divideUnsigned(int dividend,int divisor)
- parseUnsignedInt(String s)
- parseUnsignedInt(String s,int radix)
- remainingUnsigned(int dividend,int divisor)
- toUnsignedLong(int x)
- toUnsignedString(int i)
- toUnsignedString(int i,int radix)
以下是一个示例用法:
public static void main(String[] args) { int uint = Integer.parseUnsignedInt("4294967295"); System.out.println(uint); // -1 System.out.println(Integer.toUnsignedString(uint)); // 4294967295 }