๐Ÿ“‹ ์ž๊ฒฉ์ฆ/์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ๋Šฅ์‚ฌ

์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ๋Šฅ์‚ฌ 17.์—ฐ์‚ฐ

๊ณต๋ฐฑ์˜ค 2025. 3. 21. 12:33
728x90
๋ฐ˜์‘ํ˜•

๋น„ํŠธ ์—ฐ์‚ฐ์ž (Bitwise Operators) ์ •๋ฆฌ

1. AND ์—ฐ์‚ฐ (&) - ๋งˆ์Šคํ‚น (Masking)

AND ์—ฐ์‚ฐ์€ ํŠน์ • ๋ฌธ์ž๋‚˜ ๋น„ํŠธ๋ฅผ ์‚ญ์ œ(Clear)ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋งˆ์Šคํ‚น ์—ฐ์‚ฐ์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์‚ญ์ œํ•  ๋ถ€๋ถ„์˜ ๋น„ํŠธ๋ฅผ 0๊ณผ AND ์—ฐ์‚ฐํ•˜๋ฉด ํ•ด๋‹น ๋น„ํŠธ๊ฐ€ 0์ด ๋˜์–ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ:

int a = 0b1101;   // 13 (2์ง„์ˆ˜)
int mask = 0b1010; // ๋งˆ์Šคํฌ ๊ฐ’
int result = a & mask; // 0b1000 (8)

2. OR ์—ฐ์‚ฐ (|) - ์„ ํƒ์  ์„ธํŠธ (Selective Set)

OR ์—ฐ์‚ฐ์€ ํŠน์ • ๋ฌธ์ž๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ๋น„ํŠธ๋ฅผ 1๋กœ ์„ค์ •(Set)ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์„ ํƒ์  ์„ธํŠธ ์—ฐ์‚ฐ์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ์œ„์น˜์˜ ๋น„ํŠธ๋ฅผ 1๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด OR ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ:

int a = 0b1100;  // 12
int mask = 0b0011;
int result = a | mask; // 0b1111 (15)

3. XOR ์—ฐ์‚ฐ (^) - ๋น„๊ต ๋ฐ ๋ฐ˜์ „ (Toggle)

XOR ์—ฐ์‚ฐ์€ ๋‘ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๋น„ํŠธ๋ฅผ ๋ฐ˜์ „(Toggle)ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ๋น„๊ต: XOR ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ 0์ด๋ฉด ๋™์ผํ•œ ๋ฐ์ดํ„ฐ, 1์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.
  • ๋น„ํŠธ ๋ฐ˜์ „: ํŠน์ • ๋น„ํŠธ๋ฅผ ๋ฐ˜์ „์‹œํ‚ค๋ ค๋ฉด XOR ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ:

int a = 0b1101;
int b = 0b1011;
int result = a ^ b; // 0b0110 (6, ์„œ๋กœ ๋‹ค๋ฅธ ๋น„ํŠธ ํ™•์ธ)

// ํŠน์ • ๋น„ํŠธ ๋ฐ˜์ „
int c = 0b1100;
int toggle_mask = 0b0100;
int toggled = c ^ toggle_mask; // 0b1000 (๋ฐ˜์ „๋œ ๊ฐ’)

4. NOT ์—ฐ์‚ฐ (~) - ๋ณด์ˆ˜ (Complement)

NOT ์—ฐ์‚ฐ์€ ๊ฐ ๋น„ํŠธ๋ฅผ ๋ฐ˜์ „์‹œ์ผœ ๋ณด์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  0์„ 1๋กœ, 1์„ 0์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์˜ˆ์ œ:

int a = 0b00001111;
int result = ~a; // 0b11110000 (๋ณด์ˆ˜ ์—ฐ์‚ฐ)

5. ๋น„ํŠธ ์ด๋™ (Shift & Rotate)

๋…ผ๋ฆฌ ์‹œํ”„ํŠธ (Logical Shift)

๋…ผ๋ฆฌ ์‹œํ”„ํŠธ๋Š” ๋น„ํŠธ๋ฅผ ๋‹จ์ˆœํžˆ ์™ผ์ชฝ(<<) ๋˜๋Š” ์˜ค๋ฅธ์ชฝ(>>)์œผ๋กœ ์ด๋™์‹œํ‚ค๋ฉฐ, ๋นˆ ์ž๋ฆฌ๋Š” 0์œผ๋กœ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

์˜ˆ์ œ:

int a = 0b00001111;  // 15
int leftShift = a << 2;  // 0b00111100 (60)
int rightShift = a >> 2; // 0b00000011 (3)

์‚ฐ์ˆ  ์‹œํ”„ํŠธ (Arithmetic Shift)

์‚ฐ์ˆ  ์‹œํ”„ํŠธ๋Š” ๋ถ€ํ˜ธ ๋น„ํŠธ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์ด๋™ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์˜ค๋ฅธ์ชฝ ์‹œํ”„ํŠธ ์‹œ ๋ถ€ํ˜ธ ๋น„ํŠธ(1 ๋˜๋Š” 0)๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ:

int a = -8;  // 0b11111000 (8๋น„ํŠธ ๊ธฐ์ค€)
int arithmeticRightShift = a >> 2; // 0b11111110 (-2)

ํšŒ์ „ ์ด๋™ (Rotate Move)

ํšŒ์ „ ์ด๋™์€ ๋น„ํŠธ๋ฅผ ์ด๋™ํ•œ ํ›„, ๋ฐ€๋ ค๋‚œ ๋น„ํŠธ๋ฅผ ๋ฐ˜๋Œ€ํŽธ ๋์œผ๋กœ ๋‹ค์‹œ ์ฑ„์›Œ ๋„ฃ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์˜ˆ์ œ:

int a = 0b1101;  // 13
int rotateLeft = (a << 1) | (a >> 3);  // ์™ผ์ชฝ ํšŒ์ „
int rotateRight = (a >> 1) | (a << 3); // ์˜ค๋ฅธ์ชฝ ํšŒ์ „

17. แ„‹แ…งแ†ซแ„‰แ…กแ†ซ.pdf
0.36MB

728x90