[java] Java int는 항상 32 비트입니까?

Java는 int항상 어디서나 32 비트 부호있는 정수가 될까요?



답변

예, Java 언어 사양에 정의되어 있습니다.

에서 4.2 : 원시 유형 및 값 :

적분 유형은 byte, short,
int, 및 long, 그 값이며, 8 비트, 16 비트, 32 비트 및 64 비트 서명 된 보수를 각각 정수로하고, char값은, 16 비트의 부호없는 정수는 UTF-16 코드 대표 단위 (§3.1).

추가로 섹션 4.2.1 : 적분 유형 및 값 :

정수 유형의 값은 다음 범위의 정수입니다.

  • 바이트의 경우 -128에서 127까지
  • 간단히 말해서 -32768에서 32767까지
  • int의 경우 -2147483648에서 2147483647까지
  • 오랫동안 -9223372036854775808에서 9223372036854775807까지
  • char의 경우 ‘\ u0000’에서 ‘\ uffff’까지 (즉, 0에서 65535까지)


답변

ints는 32 비트입니다. 더 필요하면 longs는 64 비트입니다.


답변

Java 8은 부호없는 정수에 대한 일부 지원을 추가했습니다. 기본 형식 int은 여전히 ​​서명되어 있지만 일부 메서드는이 를 부호없는 정수 로 해석합니다.

Java 8 의 Integer 클래스 에 다음 메소드가 추가되었습니다 .

  • compareUnsigned (int x, int y)
  • divideUnsigned (int 피제수, int 제수)
  • parseUnsignedInt (문자열 s)
  • parseUnsignedInt (String s, int 기수)
  • restderUnsigned (int 피제수, int 제수)
  • toUnsignedLong (int x)
  • toUnsignedString (int i)
  • toUnsignedString (int i, int 기수)

다음은 사용 예입니다.

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


답변