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까지)
답변
int
s는 32 비트입니다. 더 필요하면 long
s는 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