반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 앱개발
- 타이쿤
- github submodule
- 안드로이드개발
- 개발
- 유니티
- firebase
- 게임개발
- github
- GIT
- 안드로이드
- Kotlin
- 안드로이이드 submodule
- 목서버
- gitlab submodule
- 티스토리
- 내 맘대로 정리한 안드로이드
- 코틀린
- Unity
- 앱
- 서브모듈 pull
- 서브모듈 sourcetree
- DataBinding
- 카페오냥
- java
- Android Studio
- 쿼터뷰
- Android
- submodule sourcetree
- 2d게임
Archives
- Today
- Total
Uing? Uing!!
[Kotlin] ushr(>>>)와 shr(>>) 의 차이 본문
반응형
자바 내부에서 bitCount를 세는 방식을 찾아보니 아래와 같이 카운팅하고 있었다.
/**
* Returns the number of one-bits in the two's complement binary
* representation of the specified {@code int} value. This function is
* sometimes referred to as the <i>population count</i>.
*
* @param i the value whose bits are to be counted
* @return the number of one-bits in the two's complement binary
* representation of the specified {@code int} value.
* @since 1.5
*/
@HotSpotIntrinsicCandidate
public static int bitCount(int i) {
// HD, Figure 5-2
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
}
shift 연산은 >>나 <<인게 기억이 났는데, >>> 연산이 뜻하는 바가 헷갈렸다.
kotlin으로 가져와보니 이렇게 변환된다.
@HotSpotIntrinsicCandidate
fun bitCount(i: Int): Int {
// HD, Figure 5-2
var i = i
i = i - (i ushr 1 and 0x55555555)
i = (i and 0x33333333) + (i ushr 2 and 0x33333333)
i = i + (i ushr 4) and 0x0f0f0f0f
i = i + (i ushr 8)
i = i + (i ushr 16)
return i and 0x3f
}
오랜만에 ushr, shr의 차이를 찾아 보니 옛날에 배웠던 기억이 났다.
shr는 shift right로 바이너리를 n칸 오른쪽으로 밀면서 앞에 1을 채워넣어 기존의 positive/negative 비트를 유지한다.
반면 ushr는 unsigned shift right로, 똑같이 바이너리를 n칸 오른쪽으로 밀지만, unsigned이므로 첫 번째 비트를 부호로 인식하지 않아서, 앞에 1대신 0을 채워넣는다.
추후에 기억하기 위해 각각의 의미를 정리해 둔다.
예시에 사용된 숫자 -5는 binary로 11111111111111111111111111111011이다.
Java | Kotlin | 의미 | 예시(Kotlin) | 결과 |
>> | shr | shift right | 0b1111 shr -5 | 11111111111111111111111111111101 |
>>> | ushr | unsigned shift right | 0b1111 ushr -5 | 01111111111111111111111111111101 |
반응형
'Kotlin' 카테고리의 다른 글
[내 맘대로 정리한 Kotlin] Functional Interaface: 오브젝트를 람다식으로 생성하기 (0) | 2021.07.15 |
---|---|
[내 맘대로 정리한 Kotlin] @CallSuper 어노테이션: 상속은 허용하되, 덧붙이는 것만 허용하고 싶다면? (0) | 2021.03.31 |
[내 맘대로 정리한 Kotlin] @JvmOverloads: constructor를 일일이 상속받아 만들기 귀찮다면! (0) | 2021.03.30 |
[내 맘대로 정리한 Kotlin] 확장 함수와 확장 프로퍼티: 직접 수정할 수 없는 클래스에 함수&프로퍼티 추가하기 (2) | 2020.12.13 |
[내 맘대로 정리한 Kotlin] vararg(가변인자)로 파라미터 원하는 개수만큼 받기 (0) | 2020.12.11 |
Comments