๐ฃ 3. Binary Search & Bitwise Operations
3. Binary Search & Bitwise operations
๐ 1. ๋นํธ ์กฐ์
- ์ฐ์ฐ๋ค์ด ๋นํธ ๋จ์๋ก ์ด๋ฃจ์ด์ง
2์ ๋ณด์์ ์์
์ปดํจํฐ๋ ์ ์๋ฅผ ์ ์ฅํ ๋ 2์ ๋ณด์ ํํ๋ก ์ ์ฅํ๋ค.
์์ ํํ : ์์ ์ ๋๊ฐ์ ๋ถํธ ๋นํธ(sign bit)๋ฅผ 1๋ก ์ธํ
$-k$๋ฅผ $N$๋นํธ์ 2์ง์๋ก ํํํ๋ ๋ฐฉ๋ฒ
- $concat(1, 2^{N-1}-k)$
- $NOT k + 1$
- ์ผ์ชฝ - ์ค๋ฅธ์ชฝ ์ ๋๊ฐ ํฉ์ฐ ๊ฒฐ๊ณผ = ํญ์ $2^3$
- ๋ถํธ๋นํธ๋ฅผ ์ ์ธํ ์ผ์ชฝ - ์ค๋ฅธ์ชฝ 2์ง์ ๊ฐ ํญ์ ๋์ผ
์ฐ์ ์ฐ์ธก ์ํํธ ๐ย ๋ ผ๋ฆฌ ์ฐ์ธก ์ํํธ
- ์ฐ์ ์ฐ์ธก ์ํํธ(arithmetic right shift)
>>
: ๋ถํธ ๋นํธ ๋์ผ (์์ ์ฐ์ฐ์ ๊ทธ๋๋ก)- 2๋ก ๋๋ ๊ฒฐ๊ณผ์ ๋์ผ
- ๋
ผ๋ฆฌ ์ฐ์ธก ์ํํธ(logical right shift)
>>>
: ๋น์๋ฆฌ 0์ผ๋ก ์ฑ์ (์์ ์ฐ์ฐ์ ์์๋ก ๋ณ๊ฒฝ)- ์ผ๋ฐ์ ์ธ ๋นํธ ์ํํธ
๊ธฐ๋ณธ์ ์ธ ๋นํธ ์กฐ์ : ๋นํธ๊ฐ ํ์ธ ๋ฐ ์ฑ์๋ฃ๊ธฐ
- ๋นํธ๊ฐ ํ์ธ
1
2
3
boolean getBit(int num, int i) {
return ((num & (1 << i)) != 0);
}
i๋ฒ์งธ ๋นํธ ๊ฐ ํ์ธ(True | False) |
- ๋นํธ๊ฐ ์ฑ์๋ฃ๊ธฐ
1
2
3
int setBit(int num, int i) {
return num | (1 << i);
}
i๋ฒ์งธ ๋นํธ ๊ฐ ๋ณ๊ฒฝ
- ๋นํธ๊ฐ ์ญ์ ํ๊ธฐ
1
2
3
4
int clearBit(int num, int i) {
int mask = ~(1 << i);
return num & mask;
}
- ๋นํธ๊ฐ ๋ฐ๊พธ๊ธฐ
1
2
3
4
5
int updateBit(int num, int i, boolean bitIs1) {
int value = bitIs1 ? 1 : 0;
int mask = ~(1 << i);
return (num & mask) | (value << i);
}
This post is licensed under CC BY 4.0 by the author.