최근 BigInteger 를 통해 2진수, 10진수, 16진수로 간단하게 변환하는 방법을 정리했습니다. [안드로이드] byteArray, 2진수, 10진수, 16진수 간단 변환 (with BigInteger) 추가로, BigInteger 를 활용해...

[안드로이드] 비트변경 예제 : set bit 1 or 0 (with BigInteger)

 

최근 BigInteger 를 통해 2진수, 10진수, 16진수로 간단하게 변환하는 방법을 정리했습니다.

[안드로이드] byteArray, 2진수, 10진수, 16진수 간단 변환 (with BigInteger)

추가로, BigInteger 를 활용해서 특정 데이터 binary 의 bit 를 변경하는 방법을 정리하려고 합니다.





1. BigInteger

BigInteger 는 허용 범위와 상관없이 큰 값을 취할 수 있는 특징을 가집니다.

더 나아가, BigInteger 를 통해 아래와 같은 동작을 활용 할 수 있습니다.



 - 산술 연산(add, subtract, divide, multiply)

 - 비트 연산(and, or, xor, shiftLeft, shiftRitght)

 - 비트 컨트롤(bitLength, testBit, setBit, clearBit)


이 중에 비트 컨트롤을 활용하려고 합니다.




2. BigInteger : 비트 컨트롤


 - bitLength() : 비트 수 반환

 - testBit(int n) : 지정된 비트가 설정된 경우 true 반환

 - setBit(int n) : 지정된 비트를 set(1) 하고 BigInteger 반환

 - clearBit(int n) : 지정된 비트를 set(0) 하고 BigInteger 반환


간단한 예시를 보면 아래와 같습니다.

val bigInteger = BigInteger("1010", 2) 
bigInteger.bitLength() // return 4
bigInteger.testBit(1) // return true
bigInteger.setBit(0) // return BigInteger("1011", 2)
bigInteger.clearBit(1) // return BigInteger("1000", 2)




3. BigInteger : 예제

BigInteger 비트컨트롤을 활용하여 다음과 같은 예제로 구현해보았습니다.

 - 임의의 값을 2진수 또는 10진수 또는 16진수로 입력하고 apply 한다

 - 지정된 임의의 값은 2진수, 10진수, 16진수로 표시해준다.

 - 지정된 임의의 값의 bitLength 를 표시해준다.

 - bit index 를 입력하고 해당 bit 를 변경해준다.

 - bit index 를 입력하고 해당 bit 값을 가져온다.



4. BigInteger : 예제 다운로드

https://github.com/bictoselfdev/BigIntegerEx





[참고자료]

Android developers




0 comments: