簡體   English   中英

Java int 總是 32 位嗎?

[英]Is a Java int always 32 bits?

Java 的int始終和任何地方都是 32 位有符號整數嗎?

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

來自第 4.2 節:原始類型和值

整數類型是byteshortintlong ,它們的值分別是 8 位、16 位、32 位和 64 位有符號二進制補碼整數,以及char ,它們的值是 16 位無符號整數表示 UTF-16 代碼單元(第 3.1 節)。

另外來自第 4.2.1 節:積分類型和值

整數類型的值是以下范圍內的整數:

  • 對於字節,從 -128 到 127,包括
  • 簡而言之,從-32768到32767,包括
  • 對於 int,從 -2147483648 到 2147483647(含)
  • 長期,從-9223372036854775808到9223372036854775807,含
  • 對於char,從'\'到'\￿'包含,即0到65535

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

Java 8 添加了對無符號整數的一些支持。原始int仍然是有符號的,但是有些方法會將它們解釋為無符號。

Java 8 中的Integer 類添加了以下方法:

  • 比較無符號(int x,int y)
  • 除無符號(整數被除數,整數除數)
  • parseUnsignedInt(String s)
  • parseUnsignedInt(String s, int radix)
  • 剩余無符號(整數除數,整數除數)
  • 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
}

作為補充,如果 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM