Java int her zaman 32 bit midir?


82

Java inther zaman ve her yerde 32 bitlik işaretli bir tamsayı mı olacak?


Bir int değerini temsil etmek için kullanılan bit sayısı, public static final int SIZE = 32;Java 1.5'ten beri belirtilen sabit Tamsayı.SIZE'dir .
burnabyRails

Yanıtlar:


122

Evet, Java Dil Belirtiminde tanımlanmıştır .

Gönderen Bölüm 4.2: İlkel Türleri ve Değerleri :

Entegre türleri byte, short, intve long, Değerleri 8-bit, 16-bit, 32-bit, 64-bit işaretli two's-tamamlayıcı sırasıyla tamsayı, ve chardeğerleri, 16-bit işaretsiz tamsayı UTF-16 kod temsil eden birimler (§3.1).

Ve ayrıca Bölüm 4.2.1'den: İntegral Türleri ve Değerler :

İntegral türlerinin değerleri, aşağıdaki aralıklarda bulunan tam sayılardır:

  • Bayt için -128'den 127'ye kadar (dahil)
  • Kısaca, -32768'den 32767'ye kadar
  • İnt için, -2147483648 ile 2147483647 arası, dahil
  • Uzun için, -9223372036854775808'den 9223372036854775807'ye kadar, dahil
  • Karakter için "\ u0000" ile "\ uffff" dahil, yani 0 ile 65535 arası

8

ints 32 bittir. Daha fazlasına ihtiyacınız olursa long, 64 bittir.


7

Java 8, işaretsiz tamsayılar için bazı destek ekledi. İlkel inthala işaretlidir, ancak bazı yöntemler onları işaretsiz olarak yorumlayacaktır.

Java 8'de Integer sınıfına aşağıdaki yöntemler eklenmiştir :

  • CompareUnsigned (int x, int y)
  • divideUnsigned (int temettü, int bölen)
  • parseUnsignedInt (Dizeler)
  • parseUnsignedInt (String s, int radix)
  • kalan İmzasız (int temettü, int bölen)
  • toUnsignedLong (int x)
  • toUnsignedString (int i)
  • toUnsignedString (int i, int radix)

İşte örnek bir kullanım:

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

4

Tamamlayıcı olarak, 64 bit uzunluğundaki gereksinimlerinizi karşılamıyorsa, java.math.BigInteger'ı deneyin .

Sayının 64 bit uzunluğunun dışında olduğu durumlar için uygundur.

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

Çıktı:

Toplam: 18446744073709551614

Fark şudur: -18446744073709551615

Ürün: -85070591730234615856620279821087277056

Bölüm: 1

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.