cpp ๋น„ํŠธ ์—ฐ์‚ฐ

๋น„ํŠธ ์—ฐ์‚ฐ์€ ๊ฑฐ์˜ ๋ชจ๋“  lowํ•œ(์ƒ๋Œ€์ ์œผ๋กœ) ์–ธ์–ด๋Š” ์ง€์›ํ•˜๋Š”๋ฐ, ์‹ค์ œ๋กœ ์‚ฌ์šฉํ• ๋•Œ๋Š” ์ฝ”ํ…Œ ๋ฌธ์ œ๋‚˜, ์‹œํ—˜๋ณด๋Š” ์ƒํ™ฉ ์™ธ์—๋Š” ๊ฑฐ์˜ ์—†์—ˆ๋‹ค. ๊ฒŒ์ž„์—…๊ณ„๋Š” ์ง„์งœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„ ๊ฐ„๋‹จํžˆ ์˜ˆ์ œ๋ฅผ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

๋น„ํŠธ ์—ฐ์‚ฐ์ž

  • & : AND ์—ฐ์‚ฐ์ž
  • | : OR ์—ฐ์‚ฐ์ž
  • ^ : XOR ์—ฐ์‚ฐ์ž
  • ~ : NOT ์—ฐ์‚ฐ์ž
  • << : ์™ผ์ชฝ ์‹œํ”„ํŠธ ์—ฐ์‚ฐ์ž
  • >> : ์˜ค๋ฅธ์ชฝ ์‹œํ”„ํŠธ ์—ฐ์‚ฐ์ž

๋น„ํŠธ ์—ฐ์‚ฐ ์˜ˆ์ œ

๋น„ํŠธ ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ ์˜ˆ์ œ ๋น„ํŠธ ๋ถ€ํ˜ธ๋ฅผ ํ”Œ๋ž˜๊ทธ๋กœ ์‚ฌ์šฉํ•˜์—ฌ, ๊ฒŒ์ž„๋‚ด์˜ ์บ๋ฆญํ„ฐ ์ƒํƒœ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

0b0000 [๋ฌด์ ][๋ณ€์ด][์Šคํ„ด][๊ณต์ค‘๋ถ€์–‘]

#include <iostream>
using namespace std;

unsigned char flag; // ๋ถ€ํ˜ธ ๋น„ํŠธ๊ฐ€ ๋”ธ๋ ค์˜ค๋Š”๊ฑด ์—„์ฒญ ํ—ท๊ฐˆ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต unsigned๋กœ ์„ ์–ธํ•œ๋‹ค.

flag = (1 << 3); // ๋ฌด์  ํ”Œ๋ž˜๊ทธ๋ฅผ ์ผ ๋‹ค.
flag |= (1 << 2); // ๋ณ€์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์ผ ๋‹ค(๋ฌด์  + ๋ณ€์ด).

// ๋ฌด์ ์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค : bitmask
if (flag & (1 << 3) != 0) {
    cout << "๋ฌด์  ์ƒํƒœ์ž…๋‹ˆ๋‹ค." << endl;
}

// ๋ฌด์ ์ด๋‚˜ ์Šคํ„ด ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค : bitmask
bool mask = (1 << 3) | (1 << 2);
if (flag & mask != 0) {
    cout << "๋ฌด์ ์ด๋‚˜ ์Šคํ„ด ์ƒํƒœ์ž…๋‹ˆ๋‹ค." << endl;
}