=================================
=================================
=================================
출처 : http://mwultong.blogspot.com/2007/04/java-int-unsigned-long-typecasting.html
자바의 32비트 정수형인 int는, "signed int" 즉, 플러스/마이너스 부호가 있는 정수입니다. 자바에는 char형만 unsigned형입니다. 그 외에는 unsigned형이 없습니다.
예를 들어, int에 들어 있는 -1 이라는 숫자를, unsigned형으로 표현하면 4294967295 가 되는데, 이런 변환 작업을 자바에서 하려면 아래 예제의 unsigned32() 라는 메소드(함수)를 사용하면 됩니다. 자바에서는 unsigned형으로 형변환(Typecasting)하는 캐스트 연산자가 제공되지는 않습니다. unsigned형 자체가 없기에...
자바의 int에는 2147483647 이상의 숫자를 넣을 수 없으므로, unsigned32()는, int가 아닌 long형으로 반환합니다. (물론 자바의 long형도 unsigned형은 없지만, 64비트 정수이기에 천문학적인 정수를 대입할 수 있습니다.)
비트 연산: unsigned int (unsigned long) 로 변환
예제 소스 파일명: Example.java
public static void main(String[] args) {
System.out.println( unsigned32(-1) ); // 4294967295
System.out.println( unsigned32(-2) ); // 4294967294
System.out.println( unsigned32(1) ); // 1
System.out.println( unsigned32(0)); // 0
System.out.println( unsigned32(0xFFFFFFFF) ); // 4294967295 (부호 없는 32비트 int형의 최대값)
System.out.println( unsigned32(0x7FFFFFFF) ); // 2147483647 (부호 있는 32비트 int형의 최대값)
System.out.println( unsigned32(0x7FFFFFFF - 1) ); // 2147483646
System.out.println( unsigned32(0x7FFFFFFF + 1) ); // 2147483648
}
// int를, unsigned형 long으로 변환 메서드
public static long unsigned32(int n) {
return n & 0xFFFFFFFFL;
}
}
=================================
=================================
=================================
_________________________________________________________________________________________________________________
자바에서는 C언어와 같이 unsigned 타입의 데이터형이 존재하지 않는다. C언어로 코딩되어 있는 모듈과 통신시 자바측에서 이러한 unsigned 타입을 처리해야한다.
다음은 이러한 unsigned 타입의 데이터형을 보정하는 클래스 소스이다. 문제가 있거나 더 나은 방안이 있으면 공유 바람.
- public class UnsignedUtil {
- public static int byte2uchar(byte b) {
- return (int) (b & 0xff);
- }
- public static byte uchar2byte(int c) {
- return (byte) (c & 0xff);
- }
- public static int short2ushort(short s) {
- return (int) (s & 0xffff);
- }
- public static short ushort2short(int s) {
- return (short) (s & 0xffff);
- }
- public static long int2uint(int i) {
- return (long) (i & 0xffffffffL);
- }
- public static int uint2int(long i) {
- return (int) (i & 0xffffffffL);
- }
- }
=================================
=================================
=================================
출처: http://mwultong.blogspot.com/2007/04/java-int-unsigned-long-typecasting.html
자바의 32비트 정수형인 int는, "signed int" 즉, 플러스/마이너스 부호가 있는 정수입니다. 자바에는 char형만 unsigned형입니다. 그 외에는 unsigned형이 없습니다.
예를 들어, int에 들어 있는 -1 이라는 숫자를, unsigned형으로 표현하면 4294967295 가 되는데, 이런 변환 작업을 자바에서 하려면 아래 예제의 unsigned32() 라는 메소드(함수)를 사용하면 됩니다. 자바에서는 unsigned형으로 형변환(Typecasting)하는 캐스트 연산자가 제공되지는 않습니다. unsigned형 자체가 없기에...
자바의 int에는 2147483647 이상의 숫자를 넣을 수 없으므로, unsigned32()는, int가 아닌 long형으로 반환합니다. (물론 자바의 long형도 unsigned형은 없지만, 64비트 정수이기에 천문학적인 정수를 대입할 수 있습니다.)
비트 연산: unsigned int (unsigned long) 로 변환
예제 소스 파일명: Example.java
public static void main(String[] args) {
System.out.println( unsigned32(-1) ); // 4294967295
System.out.println( unsigned32(-2) ); // 4294967294
System.out.println( unsigned32(1) ); // 1
System.out.println( unsigned32(0)); // 0
System.out.println( unsigned32(0xFFFFFFFF) ); // 4294967295 (부호 없는 32비트 int형의 최대값)
System.out.println( unsigned32(0x7FFFFFFF) ); // 2147483647 (부호 있는 32비트 int형의 최대값)
System.out.println( unsigned32(0x7FFFFFFF - 1) ); // 2147483646
System.out.println( unsigned32(0x7FFFFFFF + 1) ); // 2147483648
}
// int를, unsigned형 long으로 변환 메서드
public static long unsigned32(int n) {
return n & 0xFFFFFFFFL;
}
}
=================================
=================================
=================================
'JAVA' 카테고리의 다른 글
[java] java 자바, 자바서버관련 JVM 튜닝 JVM Tuning 관련 (0) | 2016.10.26 |
---|---|
[java] JAVA Byte 배열<<<>>자료형 변환 관련 (1) | 2013.04.10 |
자바 안드로이드 [NIO] JAVA NIO의 ByteBuffer와 Channel 클래스 사용법을 이용하여 파일 읽고 쓰기! 데이터 패킷 읽기 관련 (0) | 2013.04.09 |
[java] 자바 애플릿 리소스 로딩이나 네트워크에서 받을 리소스가 클때 로딩이 안되거나 에러날때 해결법(java7 버전에서 많이 발생되는 문제) (0) | 2012.08.20 |
[java] 이클립스 fat jar build 플러그인 쉽게 jar을 묶어주는 fat 플러그인 설치 가이드 (0) | 2012.08.01 |