Java int总是32位吗?

时间:2009-06-23 14:40:26

标签: java

Java的int总是和任何地方都是32位有符号整数吗?

4 个答案:

答案 0 :(得分:117)

是的,它在The Java Language Specification中定义。

来自Section 4.2: Primitive Types and Values

  

整数类型为byteshort,   intlong,其值为8位,   16位,32位和64位签名   二进制补码整数   分别和char,其值   是16位无符号整数   代表UTF-16代码单元(§3.1)。

另外还有Section 4.2.1: Integral Types and Values

  

整数类型的值是   以下范围内的整数:

     
      
  • 对于字节,从-128到127,包括
  •   
  • 简而言之,从-32768到32767,包括
  •   
  • 对于int,从-2147483648到2147483647,包括
  •   
  • 长期,从-9223372036854775808到9223372036854775807,包括在内
  •   
  • 对于char,从'\ u0000'到'\ uffff'(含),即从0到65535
  •   

答案 1 :(得分:7)

int是32位。如果您需要更多,long s是64位。

答案 2 :(得分:4)

Java 8为无符号整数添加了一些支持。原始int仍然是有符号的,但有些方法会将它们解释为无符号。

以下方法已添加到Java 8中的Integer class

  • compareUnsigned(int x,int y)
  • divideUnsigned(int dividend,int divisor)
  • parseUnsignedInt(String s)
  • parseUnsignedInt(String s,int radix)
  • remainderUnsigned(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
}

答案 3 :(得分:3)

作为补充,如果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