C ++에서는을 통해 unsigned long long int
또는을 통해 64 비트 부호없는 정수에 액세스하는 것을 즐겼습니다 uint64_t
. 이제 Java에서 long은 64 비트입니다. 그러나 그들은 서명되었습니다.
Java 기본 형식으로 사용할 수있는 unsigned long (long)이 있습니까? 어떻게 사용하나요?
C ++에서는을 통해 unsigned long long int
또는을 통해 64 비트 부호없는 정수에 액세스하는 것을 즐겼습니다 uint64_t
. 이제 Java에서 long은 64 비트입니다. 그러나 그들은 서명되었습니다.
Java 기본 형식으로 사용할 수있는 unsigned long (long)이 있습니까? 어떻게 사용하나요?
답변:
나는 그렇게 믿지 않는다. 서명 된 길이보다 더 크게하고 싶다면 BigInteger 가 유일한 방법 이라고 생각 합니다.
Java 8부터 unsigned long (unsigned 64 비트)이 지원됩니다. 사용 방법은 다음과 같습니다.
Long l1 = Long.parseUnsignedLong("17916881237904312345");
그것을 인쇄하려면 단순히 l1을 인쇄 할 수는 없지만 먼저 다음을 수행해야합니다.
String l1Str = Long.toUnsignedString(l1)
그때
System.out.println(l1Str);
Long ul1 = Long.parseUnsignedLong(objScannerInstance.next("\\d+"));
범위 검사가 없기 때문에 우아하지는 않지만 그렇지 않으면 부호있는 long의 범위를 초과 할 수있는 긴 숫자 입력을 가져올 수 있습니다. ( Scanner::next(...)
패턴 객체 또는 문자열 패턴도 허용 할 수 있다는 사실을 활용합니다 .)
아니, 없습니다. 기본 long
데이터 유형 을 사용하고 서명 문제를 처리하거나 BigInteger
.
아니, 없습니다. Java 디자이너는 서명되지 않은 int를 좋아하지 않는다고 기록했습니다. 대신 BigInteger 를 사용하십시오 . 자세한 내용은 이 질문 을 참조하십시오.
Java 8 은 해당 Long 변수를 unsigned Long으로 직접 처리 할 수있는 unsigned long 연산 집합을 제공합니다. 다음은 일반적으로 사용되는 몇 가지 변수입니다.
그리고 더하기, 빼기, 곱하기는 부호있는 long과 부호없는 long에 대해 동일합니다.
unsigned long의 경우 Guava 라이브러리의 UnsignedLong 클래스를 사용할 수 있습니다 .
다양한 작업을 지원합니다.
현재 누락 된 것처럼 보이는 것은 바이트 시프트 연산자입니다. 필요한 경우 Java의 BigInteger를 사용할 수 있습니다.
Java에는 서명되지 않은 유형이 없습니다. 이미 언급했듯이 BigInteger의 오버 헤드를 발생 시키거나 JNI를 사용하여 원시 코드에 액세스하십시오.
org.apache.axis.types 패키지에는
UnsignedLong 클래스.
maven의 경우 :
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>