¿Un int de Java es siempre de 32 bits?

82

¿Java intsiempre y en todas partes será un entero con signo de 32 bits?

nicael
fuente
El número de bits utilizados para representar un valor int es la constante Integer.SIZE, que se especifica public static final int SIZE = 32;desde Java 1.5.
burnabyRails

Respuestas:

122

Sí, está definido en la especificación del lenguaje Java .

De la Sección 4.2: Tipos y valores primitivos :

Los tipos integrales son byte, short, int, y long, cuyos valores son de 8 bits, 16 bits, 32 bits y 64 bits en complemento a dos firmados números enteros, respectivamente, y char, cuyos valores son de 16 bits enteros sin signo que representa código UTF-16 unidades (§3.1).

Y además de la Sección 4.2.1: Tipos y valores integrales :

Los valores de los tipos integrales son números enteros en los siguientes rangos:

  • Para byte, de -128 a 127, inclusive
  • Para abreviar, de -32768 a 32767, inclusive
  • Para int, de -2147483648 a 2147483647, inclusive
  • Por mucho tiempo, desde -9223372036854775808 hasta 9223372036854775807, inclusive
  • Para char, de '\ u0000' a '\ uffff' inclusive, es decir, de 0 a 65535
coobird
fuente
8

ints son 32 bits. Si necesita más, los longs son de 64 bits.

drRoflol
fuente
6

Java 8 ha agregado algo de soporte para enteros sin firmar. La primitiva inttodavía está firmada, sin embargo, algunos métodos los interpretarán como sin firmar.

Los siguientes métodos se agregaron a la clase Integer en Java 8:

  • compareUnsigned (int x, int y)
  • divideUnsigned (int dividendo, int divisor)
  • parseUnsignedInt (String s)
  • parseUnsignedInt (String s, int radix)
  • restUnsigned (dividendo int, divisor int)
  • toUnsignedLong (int x)
  • toUnsignedString (int i)
  • toUnsignedString (int i, int radix)

Aquí hay un ejemplo de uso:

public static void main(String[] args) {
    int uint = Integer.parseUnsignedInt("4294967295");
    System.out.println(uint); // -1
    System.out.println(Integer.toUnsignedString(uint)); // 4294967295
}
roblovelock
fuente
3

Como complemento, si 64 bits de longitud no cumplen con sus requisitos, pruebe java.math.BigInteger .

Es adecuado para situaciones en las que el número está más allá del rango de 64 bits.

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);
    
}

La salida es:

La suma es: 18446744073709551614

La diferencia es: -18446744073709551615

El producto es: -85070591730234615856620279821087277056

El cociente es: 1

Eugenio
fuente