Algorithm

๋น„ํŠธ๋งˆ์Šคํฌ (BitMask)

jeong_ii 2024. 7. 15. 21:46

๐Ÿ”น ๋น„ํŠธ๋งˆ์Šคํฌ(BitMask)๋ž€ ?

  • ์ปดํ“จํ„ฐ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ชจ๋“  ์ž๋ฃŒ๋ฅผ ์ด์ง„์ˆ˜(๋น„ํŠธ)๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ์ด๋Ÿฐ ์ปดํ“จํ„ฐ์˜ ์—ฐ์‚ฐ ๋ฐฉ์‹์„ ํ•˜์—ฌ ์ด์ง„์ˆ˜์˜ ๋น„ํŠธ ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

 

๐Ÿ”น ๋น„ํŠธ(Bit)๋ž€ ?

  • ๋น„ํŠธ๋Š” ์ด์ง„์ˆ˜(0๊ณผ 1๋กœ ๊ตฌ์„ฑ๋œ ์ˆ˜)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ง๋กœ ์ปดํ“จํ„ฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ตœ์†Œ ๋‹จ์œ„์ด๋‹ค.
  • ๋น„ํŠธ๋Š” 1๊ณผ 0์˜ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ , true(1) ๋˜๋Š” false(0)๋ผ๋Š” ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค.
  • ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” 10์ง„์ˆ˜๋Š” 0๊ณผ 1๋กœ ๊ตฌ์„ฑ๋œ ๋น„ํŠธ(์ด์ง„์ˆ˜)๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๐Ÿ”น ์™œ ๋น„ํŠธ๋งˆ์Šคํฌ๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

  • ๋‹ค๋ฅธ ์ž๋ฃŒ ๊ตฌ์กฐ์— ๋น„ํ•ด ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ๋น ๋ฅด๋‹ค.
    • ๋Œ€๋ถ€๋ถ„์˜ ์—ฐ์‚ฐ์ด O(1)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.
    • ํŠน์ • ์›์†Œ์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•  ๋•Œ, ์„ ํ˜• ํƒ์ƒ‰ํ•  ํ•„์š” ์—†์ด AND ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ 0์ด ์•„๋‹Œ์ง€ ์ฒดํฌํ•˜์—ฌ ๊ฒ€์‚ฌํ•œ๋‹ค.
  • ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•ด์ง„๋‹ค.
    • ์ง‘ํ•ฉ์„ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋น„ํŠธ๋งˆ์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋” ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • boolean type์œผ๋กœ ๋ฐฐ์—ด์˜ ๋ฐฉ๋ฌธ ์ฒดํฌ๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ 1byte๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๋น„ํŠธ๋งˆ์Šคํ‚น์„ ์‚ฌ์šฉํ•˜๋ฉด 1bit๋กœ ๋ฐฉ๋ฌธ ์ฒดํฌํ•จ์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • DP, ์ˆœ์—ด ๋“ฑ ๋ฐฐ์—ด ํ™œ์šฉ๋งŒ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ

 

๐Ÿ”น ๋น„ํŠธ ์—ฐ์‚ฐ

โ—ฝ AND ์—ฐ์‚ฐ : A & B

A = 27, B = 83์ธ ๊ฒฝ์šฐ, A์™€ B๋ฅผ ์ด์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
A = 11011, B = 1010011

AND ์—ฐ์‚ฐ ์ ์šฉ
   0 0 1 1 0 1 1
& 1 0 1 0 0 1 1
---------------------
   0 0 1 0 0 1 1

์ถœ๋ ฅ : A & B = 19
  • AND ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋‘ ๋น„ํŠธ ๋ชจ๋‘ 1์ธ ๊ฒฝ์šฐ 1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์˜ˆ์ œ์˜ A์™€ B๋Š” ์ž๋ฆฟ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋ฏ€๋กœ ์ด๋ฅผ ๋งž์ถฐ์ฃผ๊ธฐ ์œ„ํ•ด A์˜ ์•ž์— 0์„ ์ถ”๊ฐ€ํ•˜์—ฌ B์™€ ์ž๋ฆฟ์ˆ˜๋ฅผ ๋งž์ถฐ์ค€๋‹ค.

 

โ—ฝ OR ์—ฐ์‚ฐ : A | B

A = 27, B = 83์ธ ๊ฒฝ์šฐ, A์™€ B๋ฅผ ์ด์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
A = 11011, B = 1010011

OR ์—ฐ์‚ฐ ์ ์šฉ
   0 0 1 1 0 1 1
|  1 0 1 0 0 1 1
---------------------
   1 0 1 1 0 1 1

์ถœ๋ ฅ : A | B = 91
  • OR ์—ฐ์‚ฐ์€ ๋‘ ๋น„ํŠธ ์ค‘ ํ•œ ๊ฐœ๋ผ๋„ 1์ธ ๊ฒฝ์šฐ 1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

โ—ฝ XOR ์—ฐ์‚ฐ : A ^ B

A = 27, B = 83์ธ ๊ฒฝ์šฐ, A์™€ B๋ฅผ ์ด์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
A = 11011, B = 1010011

XOR ์—ฐ์‚ฐ ์ ์šฉ
    0 0 1 1 0 1 1
^  1 0 1 0 0 1 1
---------------------
    1 0 0 1 0 0 0

์ถœ๋ ฅ : A ^ B = 72
  • XOR ์—ฐ์‚ฐ์€ ๋‘ ๋น„ํŠธ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅผ ๊ฒฝ์šฐ 1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

โ—ฝ NOT ์—ฐ์‚ฐ : ~ A (๋ณด์ˆ˜)

A = 83์ธ ๊ฒฝ์šฐ, A๋ฅผ ์ด์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
A = 01010011

NOT ์—ฐ์‚ฐ ์ ์šฉ
8 ๋น„ํŠธ ~A : 10101100
32๋น„ํŠธ ~A : 11111111111111111111111110101100

์ถœ๋ ฅ : 172(Unsigned), -84(Signed)
  • NOT ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ž๋ฃŒํ˜•์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ž๋ฃŒํ˜•์€ signed์™€ unsigned์ด ์žˆ๋‹ค.
  • NOT ์—ฐ์‚ฐ์€ ์ด์ง„์ˆ˜์˜ ๊ฐ ๋น„ํŠธ๋ฅผ ๋ฐ˜์ „์‹œํ‚ค๋Š” ์—ฐ์‚ฐ์ด๋‹ค. ๊ฐ ๋น„ํŠธ๋ฅผ 0์€ 1๋กœ, 1์€ 0์œผ๋กœ ๋ฐ”๊พผ๋‹ค.

 

โ—ฝ Left Shift : A << B

A << B
A๋ฅผ B๋งŒํผ ์™ผ์ชฝ์œผ๋กœ ๋ฐ€์–ด์ค€๋‹ค๋Š” ์˜๋ฏธ์˜ ์‹์ด๋‹ค.
๋ฐ€์–ด์ค€ ๋งŒํผ ๋™์‹œ์— 0์„ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

1 << 0 : 1
1 << 1 : 2 (10)
1 << 2 : 4 (100)
1 << 3 : 8 (1000)
1 << 4 : 16 (10000)
3 << 3 : 24 (11000)
5 << 10 : 5120 (1010000000000)
  • A << B ์‹์€ A * 2์˜ B ์ œ๊ณฑ๊ณผ ๊ฐ™๋‹ค.

 

โ—ฝ Right Shift : A >> B

A >> B
A๋ฅผ B๋งŒํผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐ€์–ด์ค€๋‹ค๋Š” ์˜๋ฏธ์˜ ์‹์ด๋‹ค.
๋ฐ€์–ด์ค€ ๋งŒํผ ๋™์‹œ์— 0์„ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

1 >> 0 : 1
1 >> 1 : 0 (0)
10 >> 1 : 5 (101)
10 >> 2 : 2 (10)
10 >> 3 : 1 (1)
30 >> 1 : 15 (1111)
1024 >> 10 : 1 (1)
  • A >> B ์‹์€ A / 2์˜ B ์ œ๊ณฑ๊ณผ ๊ฐ™๋‹ค.

 

๐Ÿ”น ๋น„ํŠธ๋งˆ์Šคํฌ๋ฅผ ์ด์šฉํ•œ ์ง‘ํ•ฉ ๊ตฌํ˜„

๋น„ํŠธ๋งˆ์Šคํฌ๋ฅผ ์ด์šฉํ•œ ์ง‘ํ•ฉ ๊ตฌํ˜„์€ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ด๊ณ , ์ž์ฃผ ์“ฐ์ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

ํ•˜๋‚˜์˜ bit๊ฐ€ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. bit๊ฐ€ 1์ด๋ฉด ํ•ด๋‹น ์›์†Œ๊ฐ€ ์ง‘ํ•ฉ์— ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ , 0์ด๋ฉด ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

๋”ฐ๋ผ์„œ N๋น„ํŠธ๋Š” N๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ–๋Š” ์ง‘ํ•ฉ์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ๋“ค์„ ๋ชจ๋‘ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โ—ฝ ๊ณต์ง‘ํ•ฉ๊ณผ ๊ฝ‰ ์ฐฌ ์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ

int A = 0;
A = (1 << 10) - 1; // 1023
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ณต์ง‘ํ•ฉ์€ bit๊ฐ€ ๋ชจ๋‘ ๊บผ์ง„ ์ƒํ™ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์ˆ˜ 0์ด ๊ณต์ง‘ํ•ฉ์„ ํ‘œํ˜„ํ•œ๋‹ค.
  • ๋ฐ˜๋Œ€๋กœ ๊ฝ‰ ์ฐฌ ์ง‘ํ•ฉ์€ bit๊ฐ€ ๋ชจ๋‘ ์ผœ์ง„ ์ƒํ™ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— 1111111111์˜ ๊ฐ’์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค

 

โ—ฝ ์›์†Œ ์ถ”๊ฐ€

A |= (1 << k)
  • A ์ง‘ํ•ฉ์— ํŠน์ • ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ์›์†Œ์— ํ•ด๋‹นํ•˜๋Š” bit๋งŒ ์ผœ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น bit๋ฅผ ํ•ญ์ƒ 1๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด OR ์—ฐ์‚ฐ์„ ์ด์šฉํ•œ๋‹ค.

 

โ—ฝ ์›์†Œ ์‚ญ์ œ

A &= ~(1 << k)
  • A ์ง‘ํ•ฉ์— ํฌํ•จ๋œ ํŠน์ • ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  • A์— k๋ฒˆ์งธ ์›์†Œ์˜ ํฌํ•จ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ํ•ด๋‹น bit๋ฅผ ๋„๊ธฐ ์œ„ํ•ด AND ์—ฐ์‚ฐ์„ ์ด์šฉํ•œ๋‹ค,
    • 1 << k : k๋ฒˆ์งธ ์œ„์น˜์˜ ๋น„ํŠธ๋ฅผ 1๋กœ ์„ค์ •
    • ~(1 << k) : k๋ฒˆ์งธ ์œ„์น˜์˜ ๋น„ํŠธ๋ฅผ 0์œผ๋กœ ๋งŒ๋“ฆ (๋ฐ˜์ „)
    • A & ~(1 << k) : A ์ง‘ํ•ฉ์— ๋‹ด๊ธด k๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ 0์œผ๋กœ ์„ค์ •

 

โ—ฝ ์›์†Œ์˜ ํฌํ•จ ์—ฌ๋ถ€ ํ™•์ธ

if ((A & (1 << k)) == (1 << k))
  • A ์ง‘ํ•ฉ์— ํŠน์ • ์›์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  • k๋ฒˆ์งธ ์›์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, k๋ฒˆ์งธ ๋น„ํŠธ๊ฐ€ ์ผœ์ ธ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.
    • A & (1 << k) : ์ง‘ํ•ฉ A์—์„œ k๋ฒˆ์งธ ์œ„์น˜์˜ ๋น„ํŠธ๊ฐ€ 1์ธ์ง€ ํ™•์ธ
    • (A & (1 << k)) == (1 << k) : AND ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ€ 1 << k๊ณผ ๊ฐ™์€์ง€ ๋น„๊ต

 

โ—ฝ ์›์†Œ์˜ ํ† ๊ธ€

A ^= (1 << k)
  • A ์ง‘ํ•ฉ์— ํ•ด๋‹น ์›์†Œ๊ฐ€ ๋น ์ ธ์žˆ๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€ํ•˜๊ณ , ๋“ค์–ด์žˆ๋Š” ๊ฒฝ์šฐ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  • XOR ์—ฐ์‚ฐ์„ ์ด์šฉํ•œ๋‹ค.

 

โ—ฝ ๋‘ ์ง‘ํ•ฉ์— ๋Œ€ํ•ด ์—ฐ์‚ฐํ•˜๊ธฐ

A | B           // A์™€ B์˜ ํ•ฉ์ง‘ํ•ฉ
A & B         // A์™€ B์˜ ๊ต์ง‘ํ•ฉ
A & (~B)    // A์—์„œ B๋ฅผ ๋บ€ ์ฐจ์ง‘ํ•ฉ
A ^ B         // A์™€ B ์ค‘ ํ•˜๋‚˜์—๋งŒ ํฌํ•จ๋œ ์›์†Œ๋“ค์˜ ์ง‘ํ•ฉ
  • ๋‘ ์ง‘ํ•ฉ์„ A์™€ B๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋“ค์„ ํ†ตํ•ด A์™€ B์˜ ํ•ฉ์ง‘ํ•ฉ, ๊ต์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ ๋“ฑ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.


โ—ฝ ์ง‘ํ•ฉ์˜ ํฌ๊ธฐ ๊ตฌํ•˜๊ธฐ

int bitCount(int A) {
       if (A == 0) return 0;
       return A % 2 + bitCount(A / 2);
|

//  ๋‚ด์žฅ ๋ช…๋ น์–ด
Integer.bitCount(A)
  • ์ง‘ํ•ฉ์— ํฌํ•จ๋œ ์›์†Œ์˜ ํฌ๊ธฐ๋ฅผ ๊ตฌํ•œ๋‹ค๋ฉด A์— ์ผœ์ง„ bit ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.
  • ์ง์ ‘ ๋ชจ๋“  ๋น„ํŠธ๋ฅผ ํ™•์ธํ•˜๋ฉด์„œ ๊ฐœ์ˆ˜๋ฅผ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๊ณ , ๋‚ด์žฅ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    • if (A == 0) return 0 : A๊ฐ€ 0์ด๋ฉด ์ด์ง„์ˆ˜๋กœ '0'์ด๊ธฐ ๋•Œ๋ฌธ์— 1์˜ ๊ฐœ์ˆ˜๋Š” 0๊ฐœ์ด๋‹ค.
    • return A % 2 + bitCount(A / 2)
      • A % 2 : A์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๋น„ํŠธ๊ฐ€ 1์ธ์ง€ 0์ธ์ง€ ํ™•์ธ
      • A / 2 : A๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋น„ํŠธ ์ด๋™ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์Œ
      • ์ด๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๋ชจ๋“  ๋น„ํŠธ๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

 

โ—ฝ ์ตœ์†Œ ์›์†Œ ์ฐพ๊ธฐ

int first = A & (-A)
  • ์ง‘ํ•ฉ์— ํฌํ•จ๋œ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ์ฆ‰, ์ผœ์ ธ ์žˆ๋Š” bit ์ค‘์—์„œ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” bit๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋น„ํŠธ๋งˆ์Šคํฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŽœ์œ… ํŠธ๋ฆฌ(Fenwick Tree)์—์„œ๋„ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, A = 12์ธ ๊ฒฝ์šฐ A๋ฅผ ์ด์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด 1100์ด๋‹ค.
    • -A์˜ ์ด์ง„์ˆ˜ ํ‘œํ˜„ : '~A + 1' (๋น„ํŠธ NOT ์—ฐ์‚ฐ ํ›„ 1์„ ๋”ํ•ด์ค€๋‹ค.)
      • ~A : 0011 (๋น„ํŠธ ๋ฐ˜์ „)
      • ~A + 1 : 0100 (๋ฐ˜์ „๋œ ๊ฐ’์— 1์„ ๋”ํ•จ)
    • A & -A : 1100 & 0100 = 0100
    • ์ด๋•Œ, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” 1 ๋น„ํŠธ๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ์ถœ๋ ฅ : 4

 

โ—ฝ ์ตœ์†Œ ์›์†Œ ์ง€์šฐ๊ธฐ

A &= (A - 1)
  • ์ง‘ํ•ฉ์— ํฌํ•จ๋œ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๋ฅผ ์ง€์šฐ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, A = 12์ธ ๊ฒฝ์šฐ A๋ฅผ ์ด์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด 1100์ด๋‹ค.
    • A - 1 : 1011
    • A &= (A - 1) : 1000

 

 

 

 

 

๐Ÿ“ƒ reference