상세 컨텐츠

본문 제목

[java] 자바 Java, int를 unsigned 형 long으로 변환 캐스팅(Typecasting) 함수 관련

JAVA

by AlrepondTech 2013. 4. 10. 15:45

본문

반응형

 

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

 

 

출처 : 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 class Example {
  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;
  }
}

 

=================================

=================================

=================================

 

 

 

반응형

 

728x90

 

 

 

 

 

출처 : http://funtrip.tistory.com/
_________________________________________________________________________________________________________________
자바에서는 C언어와 같이 unsigned 타입의 데이터형이 존재하지 않는다. C언어로 코딩되어 있는 모듈과 통신시 자바측에서 이러한 unsigned 타입을 처리해야한다.

다음은 이러한 unsigned 타입의 데이터형을 보정하는 클래스 소스이다. 문제가 있거나 더 나은 방안이 있으면 공유 바람.

  1. public class UnsignedUtil {   
  2.     public static int byte2uchar(byte b) {   
  3.         return (int) (b & 0xff);   
  4.     }   
  5.   
  6.     public static byte uchar2byte(int c) {   
  7.         return (byte) (c & 0xff);   
  8.     }   
  9.   
  10.     public static int short2ushort(short s) {   
  11.         return (int) (s & 0xffff);   
  12.     }   
  13.   
  14.     public static short ushort2short(int s) {   
  15.         return (short) (s & 0xffff);   
  16.     }   
  17.   
  18.     public static long int2uint(int i) {   
  19.         return (long) (i & 0xffffffffL);   
  20.     }   
  21.   
  22.     public static int uint2int(long i) {   
  23.         return (int) (i & 0xffffffffL);   
  24.     }   
  25. }  

 

 

 

=================================

=================================

=================================

 

 

출처: 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 class Example {
  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;
  }


}

 

 

=================================

=================================

=================================

 

 

반응형


관련글 더보기

댓글 영역