Tistory View

Android Develop/helper

java int와 unsigned byte 변환

God Dangchy What should I do? 2019. 8. 4. 23:41

Java는 unsigned 타입의 변수를 지원하지 않는다. 하지만 8bits의 공간만으로 처리할 수 있는 데이터는 더 큰 타입을 쓰는 것은 낭비인 것은 당연한 사실이다. 정수연산을 위해 byte와 int로 서로 변화하는 방법을 정리한다.

 

 

byte(unsigned) to int

byte f = 200;
int  t = f < 0 ? f + 256 : f;

f를 t로 변환하는 데, f값은 음수값을 가지고 있다. 0을 포함한 양수면 그냥 처리하면 되지만, 음수일 경우 255을 더해서 변경해주면 된다. 하지만 이 변환루틴은 "?"연산자로 인해 많은 양의 연산이 필요한 부분에서는 속도저하를 유발한다.

 

 

다음의 방법이 훨씬 빠르고 좋다.

byte f = 200;
int  t = f & 0xff;

참 의미 없는 코드로 보이지만, &연산이 정수연산처리가 되어 원하는 값을 얻을 수 있다.

 

int t = ( f << 24 ) >>> 24; 이런 방법도 있는 데 위의 것보다 연산하나가 추가되고, 필자가 확인해보지 못했다.

 

int to byte(unsigned)

byte v = (byte)200;

int를 byte로 변환하는 것은 그냥 형변환을 하면 된다. 이제 unsigned byte사칙연산을 해보자

Unsigned byte 사칙연산

byte v1 = (byte) 200; // 계산이 쉽게 200선택
byte v2 = (byte) 5;

byte a = (byte)( v1 + v2 ); // 205
byte s = (byte)( v1 - v2 ); // 195
byte m = (byte)( v1 * v2 ); // 232
byte d = (byte)( ( v1 & 0xFF ) / ( v2 & 0xFF ) ); // 40

더하기, 빼기, 곱하기의 경우 그냥 처리하면 된다. 단지 연산의 결과가 정수형으므로 다시 byte로 형변환을 해줘야 한다.

나누기의 경우 미리 정수로 둘다 변환 후 처리해야 올바르게 처리된다.

 

 

 

 

만약 Java8이상을 사용한다면 byte를 int로 변환은 Byte.toUnsignedInt()를 사용할 수 있다. 하지만 필자는 그냥 이 게 더 맘에 든다.

 

 

 

Replies
Reply Write