귀하의 질문은 "자바가 부호없는 정수를 지원하지 않는 이유는 무엇입니까?"
그리고 귀하의 질문에 대한 나의 대답은 Java가 모든 기본 유형 인 byte , char , short , int 및 long 이 어셈블리에서와 마찬가지로 byte , word , dword 및 qword로 각각 처리되어야하며 Java 연산자가 서명 되기를 원한다는 것입니다. char를 제외한 모든 기본 유형의 연산 이지만 char 에서만 16 비트 부호가 없습니다.
따라서 정적 메소드는 것으로 가정 서명 동작을 도 32 및 64 비트에 대해.
서명되지 않은 작업에 대해 정적 메서드를 호출 할 수있는 최종 클래스가 필요 합니다.
이 최종 클래스를 생성하고 원하는 이름으로 호출하고 정적 메소드를 구현할 수 있습니다.
정적 메소드를 구현하는 방법에 대해 모른다면 이 링크 가 도움 이 될 수 있습니다.
내 의견으로는, 자바는 하지 ++ C와 유사한 전혀 이 경우, 어느 쪽도 서명되지 않은 유형 지원하지 않으며 연산자 오버로딩을 나는 자바는 모두 C에서 ++와 C는 전혀 다른 언어로 취급해야한다고 생각하므로,
그런데 언어의 이름도 완전히 다릅니다.
따라서 Java에서 C와 유사한 코드를 입력하는 것은 권장하지 않으며 C ++과 유사한 코드를 입력하지 않는 것이 좋습니다 .Java에서는 C ++에서 다음에 수행하려는 작업을 수행 할 수 없기 때문에, 즉, 코드는 전혀 C ++이 아니며 계속 나에게 스타일을 변경하는 것은 좋지 않습니다.
서명 된 연산에도 정적 메소드를 작성하고 사용하는 것이 좋습니다. 따라서 코드에 서명 된 연산 만 필요하지 않은 한 부호있는 연산과 서명되지 않은 연산 모두에 대한 연산자와 정적 메소드의 코드 혼합을 볼 수 없으며 괜찮습니다. 연산자 만 사용하십시오.
또한 short , int 및 long 기본 유형을 사용 하지 말고 각각 word , dword 및 qword를 대신 사용하는 것이 좋습니다. 연산자 대신 서명되지 않은 작업 및 / 또는 서명 된 작업에 대한 정적 메서드를 호출하는 것입니다.
서명 된 연산 만 수행하고 코드에서만 연산자를 사용하려는 경우 이러한 기본 유형을 short , int 및 long 사용하는 것이 좋습니다 .
실제로 word , dword 및 qword 는 언어에 존재 하지 않지만 각각에 대해 새 클래스를 만들 수 있으며 각각의 구현은 매우 쉽습니다.
클래스 워드 는 기본 유형을 짧게 유지하고 클래스 dword 는 기본 유형을 int 만 보유하고 qword 클래스 는 기본 유형을 길게 보유합니다 . 이제 모든 부호없는 메소드와 부호있는 메소드가 정적이거나 선택하지 않은 것처럼 각 클래스에서 구현 할 수 있습니다. 즉, 부호없는 단어 와 부호있는 클래스의 의미 이름을 지정하여 부호없는 문자 와 부호있는 모든 16 비트 연산을 서명 할 수 있습니다. dword 클래스 에 의미 이름을 제공하여 부호가 있고 qword 클래스 에 의미 이름을 제공하여 부호가없고 부호있는 모든 64 비트 연산이 있습니다 .
각 방법에 대해 너무 많은 다른 이름을주고 마음에 들지 않으면, 당신은 항상 자바 않았다 읽고, 자바에 과부하를 잘 사용할 수 없는 것을 너무 제거!
8 비트 부호있는 조작에 대한 연산자가 아닌 메소드와 전혀 연산자가없는 8 비트 부호없는 조작에 대한 메소드가 필요한 경우 Byte 클래스를 작성할 수 있습니다 (첫 번째 문자 'B'는 대문자 임). primitive type byte ) 및이 클래스의 메소드를 구현하십시오.
값으로 전달 및 참조로 전달 정보 :
C #에서와 같이 내가 틀리지 않으면 기본 객체는 자연스럽게 값으로 전달되지만 클래스 객체는 자연스럽게 참조로 전달되므로 Byte , word , dword 및 qword 유형의 객체는 값이 아닌 참조로 전달됩니다 기본적으로. Java가 C #에서와 같이 구조체 객체를 가지기를 바랍니다. 따라서 모든 Byte , word , dword 및 qword 를 클래스 대신 구조체 로 구현할 수 있습니다.따라서 기본 유형과 같이 C #의 모든 struct 객체는 기본적으로 참조가 아닌 값으로 전달되지만 Java는 C #보다 나쁘기 때문에 기본적으로 참조가 아닌 값으로 전달되었습니다. 이를 처리하기 위해 기본적으로 값이 아닌 참조로 전달되는 클래스와 인터페이스 만 있습니다. 따라서 Java 및 C #의 다른 클래스 객체와 같이 Byte , word , dword 및 qword 객체를 참조가 아닌 값 으로 전달 하려면 복사 생성자를 사용하면됩니다.
그것이 내가 생각할 수있는 유일한 솔루션입니다. 필자는 기본 유형을 단어, dword 및 qword로 typedef 할 수 있기를 원하지만 Java 는 C의 typedef와 동일한을 사용 하는 C #과 달리 typedef를 사용하거나 전혀 사용하지 않습니다 .
출력 정보 :
동일한 비트 시퀀스의 경우 여러 가지 방법 으로 비트 를 인쇄 할 수 있습니다. 2 진 (C printf의 % u와 같은 의미), 8 진 (C printf의 % o와 같은 의미), 16 진 (예 : C printf에서 % x의 의미) 및 정수 (C printf에서 % d의 의미)
C printf는 함수에 매개 변수로 전달되는 변수의 유형을 알지 못하므로 printf는 함수의 첫 번째 매개 변수에 전달 된 char * 객체에서만 각 변수의 유형을 알고 있습니다.
따라서 Byte , word , dword 및 qword 각 클래스에서 print 메소드를 구현하고 printf의 기능을 얻을 수 있습니다. 클래스의 기본 유형이 서명 된 경우에도 관련 알고리즘을 따라 서명되지 않은 상태로 인쇄 할 수 있습니다 논리 및 시프트 연산을 사용하여 숫자를 출력으로 인쇄합니다.
불행히도 내가 준 링크는 이러한 인쇄 방법을 구현하는 방법을 보여주지 않지만 이러한 인쇄 방법을 구현하는 데 필요한 알고리즘을 Google에서 찾을 수 있다고 확신합니다.
그게 내가 당신의 질문에 대답하고 당신에게 제안 할 수있는 전부입니다.