Tistory View
반응형
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()를 사용할 수 있다. 하지만 필자는 그냥 이 게 더 맘에 든다.
반응형
'Android Develop > helper' 카테고리의 다른 글
안드로이드 http 다운로드하기( HttpURLConnection + SSL ) (0) | 2020.12.18 |
---|---|
안드로이드 Bitmap 로드하기 (0) | 2019.09.08 |
How to detect android device orientation and rotation (0) | 2019.07.29 |
안드로이드 기기 방향 orientation, rotation 알아내기 (4) | 2019.07.29 |
Android ASyncTask 사용 (0) | 2019.06.26 |
Replies
NOTICE
RECENT ARTICLES
RECENT REPLIES
- Total
- Today
- Yesterday
LINK
TAG
- Android
- 금리
- 블로그
- OpenGL ES
- 에어콘
- 안드로이드
- 경제보복
- 컴퓨트셰이더
- 예금
- 전기료
- 전기요금
- 재테크
- 에어컨
- OpenGLes
- 애드센스
- 컴퓨트쉐이더
- 공유 컨텍스트
- 텍스처
- TTS
- 적금
- choreographer
- 전기세
- 애드핏
- 재태크
- texture
- gpgpu
- 사용료
- ComputeShader
- 아끼는 법
- 티스토리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Article Box