HOWTO · Java

Java에서 Unsigned Int 생성

이 기사에서는 Java에서 부호 없는 정수를 만드는 방법을 소개합니다.

부호 있는 정수는 -1에서 -128까지의 양수 및 음수 값 범위로 데이터베이스에 저장됩니다. 이와 반대로 Unsigned Integers는 0에서 255까지의 음수 값이 아닌 양수 범위 값의 큰 집합만 보유합니다. 즉, 부호 없는 정수는 음수 값을 저장할 수 없습니다.

Java에서 데이터 유형 세트에는 서명되지 않은 int가 명시적으로 포함되지 않습니다. 그러나 사용 사례에 따라 다른 데이터 유형은 부호 없는 정수로 처리될 수 있습니다. Java는 더 큰 부호 없는 값을 저장하기 위해 long 데이터 유형을 제공합니다.

long 데이터 유형은 64비트 크기이며 내부적으로 2의 보수에서 작동합니다. Java 8 이상 버전에서 long 데이터 유형은 0에서 2^64-1까지의 값을 저장할 수 있습니다. 단순한 int 데이터 유형에 비해 더 많은 데이터 범위를 제공합니다.

다음은 두 데이터 유형의 크기와 차이점을 정의하는 코드 블록입니다.

public class Main {
  public static void main(String[] args) {
    System.out.println("Size of int: " + Integer.SIZE + "bits");
    System.out.println("Size of int: " + Long.SIZE + "bits");
    int signedInt = -2345678;
    long unsignedValue = signedInt & 0xffffffffL;
    System.out.println(signedInt);
    System.out.println(unsignedValue);
  }
}

위의 코드 블록에서 처음 두 문장은 IntegerLong 클래스의 크기를 인쇄합니다. 정수는 int 값을 보유하는 기본 데이터 유형입니다.

int의 크기는 32바이트로 인쇄되고 Long 래퍼 클래스의 크기는 64바이트로 인쇄됩니다. 클래스에는 래퍼 클래스의 크기를 나타내는 정적 및 최종 변수가 정의되어 있습니다.

print 문 옆에 두 개의 로컬 또는 클래스 변수가 정의됩니다. 변수는 intlong 데이터 유형입니다. 정수로 인스턴스화된 값은 음수와 양수 값을 모두 보유하므로 음수입니다.

long 변수에서 부호 있는 정수는 Bitwise & 연산자로 연산됩니다. 이진 형식으로 변환된 숫자의 2의 보수에서 작동합니다. 따라서 내부적으로 먼저 음수 값을 이진 형식으로 변환합니다. 두 이진 값 사이에서 두 값에 대해 논리적 & 연산을 수행합니다. 연산자는 결국 음수 값을 양수로 변환합니다.

위의 두 프로그램 라인의 출력은 아래와 같습니다.

Size of int: 32bits
Size of int: 64bits
-2345678
4292621618