Một int Java luôn là 32 bit?


82

Java có intphải luôn luôn và ở mọi nơi là một số nguyên có dấu 32 bit không?


Số bit được sử dụng để biểu diễn giá trị int là hằng số Integer.SIZE, được chỉ định như trong public static final int SIZE = 32;Java 1.5.
burnabyRails

Câu trả lời:


122

Có, nó được định nghĩa trong Đặc tả ngôn ngữ Java .

Từ Phần 4.2: Các kiểu và Giá trị Nguyên thủy :

Các loại không thể thiếu được byte, short, int, và long, có giá trị là 8-bit, 16-bit, 32-bit và 64-bit ký two's-bổ sung số nguyên, tương ứng, và char, có giá trị được 16-bit số nguyên unsigned đại diện đang UTF-16 đơn vị (§3.1).

Và bổ sung từ Phần 4.2.1: Các kiểu và giá trị tích phân :

Giá trị của loại tích phân là số nguyên trong các khoảng sau:

  • Đối với byte, từ -128 đến 127, bao gồm
  • Tóm lại, từ -32768 đến 32767, bao gồm
  • Đối với int, từ -2147483648 đến 2147483647, bao gồm
  • Trong thời gian dài, từ -9223372036854775808 đến 9223372036854775807, bao gồm
  • Đối với char, bao gồm từ '\ u0000' đến '\ uffff', nghĩa là từ 0 đến 65535


6

Java 8 đã bổ sung một số hỗ trợ cho các số nguyên không dấu. Nguyên thủy intvẫn được ký, tuy nhiên một số phương thức sẽ diễn giải chúng là không dấu.

Các phương thức sau đã được thêm vào lớp Integer trong Java 8:

  • CompareUnsigned (int x, int y)
  • splitUnsigned (int cổ tức, int divisor)
  • parseUnsignedInt (Chuỗi s)
  • parseUnsignedInt (Chuỗi s, int cơ số)
  • còn lạiUnsigned (int cổ tức, int số chia)
  • toUnsignedLong (int x)
  • toUnsignedString (int i)
  • toUnsignedString (int i, int radix)

Đây là một ví dụ sử dụng:

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

3

Ngoài ra, nếu độ dài 64 bit không đáp ứng yêu cầu của bạn, hãy thử java.math.BigInteger .

Nó phù hợp cho các trường hợp mà con số vượt quá phạm vi dài 64 bit.

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

Đầu ra là:

Tổng là: 18446744073709551614

Sự khác biệt là: -18446744073709551615

Sản phẩm là: -85070591730234615856620279821087277056

Thương số là: 1

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.