Post

๐Ÿฃ 3. Binary Search & Bitwise Operations

3. Binary Search & Bitwise operations

๐Ÿ“š 1. ๋น„ํŠธ ์กฐ์ž‘

  • ์—ฐ์‚ฐ๋“ค์ด ๋น„ํŠธ ๋‹จ์œ„๋กœ ์ด๋ฃจ์–ด์ง


2์˜ ๋ณด์ˆ˜์™€ ์Œ์ˆ˜

  • ์ปดํ“จํ„ฐ๋Š” ์ •์ˆ˜๋ฅผ ์ €์žฅํ•  ๋•Œ 2์˜ ๋ณด์ˆ˜ ํ˜•ํƒœ๋กœ ์ €์žฅํ•œ๋‹ค.

  • ์Œ์ˆ˜ ํ‘œํ˜„ : ์ˆ˜์˜ ์ ˆ๋Œ“๊ฐ’์— ๋ถ€ํ˜ธ ๋น„ํŠธ(sign bit)๋ฅผ 1๋กœ ์„ธํŒ…

  • $-k$๋ฅผ $N$๋น„ํŠธ์˜ 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

    1. $concat(1, 2^{N-1}-k)$
    2. $NOT k + 1$

Image

  • ์™ผ์ชฝ - ์˜ค๋ฅธ์ชฝ ์ ˆ๋Œ“๊ฐ’ ํ•ฉ์‚ฐ ๊ฒฐ๊ณผ = ํ•ญ์ƒ $2^3$
  • ๋ถ€ํ˜ธ๋น„ํŠธ๋ฅผ ์ œ์™ธํ•œ ์™ผ์ชฝ - ์˜ค๋ฅธ์ชฝ 2์ง„์ˆ˜ ๊ฐ’ ํ•ญ์ƒ ๋™์ผ



์‚ฐ์ˆ  ์šฐ์ธก ์‹œํ”„ํŠธ ๐Ÿ†šย ๋…ผ๋ฆฌ ์šฐ์ธก ์‹œํ”„ํŠธ

  • ์‚ฐ์ˆ  ์šฐ์ธก ์‹œํ”„ํŠธ(arithmetic right shift)
    • >> : ๋ถ€ํ˜ธ ๋น„ํŠธ ๋™์ผ (์Œ์ˆ˜ ์—ฐ์‚ฐ์‹œ ๊ทธ๋Œ€๋กœ)
    • 2๋กœ ๋‚˜๋ˆˆ ๊ฒฐ๊ณผ์™€ ๋™์ผ
  • ๋…ผ๋ฆฌ ์šฐ์ธก ์‹œํ”„ํŠธ(logical right shift)
    • >>> : ๋นˆ์ž๋ฆฌ 0์œผ๋กœ ์ฑ„์›€ (์Œ์ˆ˜ ์—ฐ์‚ฐ์‹œ ์–‘์ˆ˜๋กœ ๋ณ€๊ฒฝ)
    • ์ผ๋ฐ˜์ ์ธ ๋น„ํŠธ ์‹œํ”„ํŠธ


๊ธฐ๋ณธ์ ์ธ ๋น„ํŠธ ์กฐ์ž‘ : ๋น„ํŠธ๊ฐ’ ํ™•์ธ ๋ฐ ์ฑ„์›Œ๋„ฃ๊ธฐ

  1. ๋น„ํŠธ๊ฐ’ ํ™•์ธ
1
2
3
boolean getBit(int num, int i) {
	return ((num & (1 << i)) != 0);
}
i๋ฒˆ์งธ ๋น„ํŠธ ๊ฐ’ ํ™•์ธ(TrueFalse)


  1. ๋น„ํŠธ๊ฐ’ ์ฑ„์›Œ๋„ฃ๊ธฐ
1
2
3
int setBit(int num, int i) {
	return num | (1 << i);
}

i๋ฒˆ์งธ ๋น„ํŠธ ๊ฐ’ ๋ณ€๊ฒฝ


  1. ๋น„ํŠธ๊ฐ’ ์‚ญ์ œํ•˜๊ธฐ
1
2
3
4
int clearBit(int num, int i) {
	int mask = ~(1 << i);
	return num & mask;
}


  1. ๋น„ํŠธ๊ฐ’ ๋ฐ”๊พธ๊ธฐ
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.