์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

2. ์—ฐ์‚ฐ์ž, ์ „์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ + ์บ๋ฆญํ„ฐ ์ƒํƒœ ์„ค์ •

GREEN๋‚˜๋ฌด 2025. 3. 19. 20:39
728x90

๐ŸŸฆ C++ ์—ฐ์‚ฐ์ž ์ •๋ฆฌ ํ‘œ

 

์—ฐ์‚ฐ์ž ์ข…๋ฅ˜ ์—ฐ์‚ฐ์ž ์„ค๋ช… ์˜ˆ์ œ
์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž + ๋ง์…ˆ a + b
- ๋บ„์…ˆ a - b
* ๊ณฑ์…ˆ a * b
/ ๋‚˜๋ˆ—์…ˆ a / b
% ๋‚˜๋จธ์ง€ a % b
๋Œ€์ž… ์—ฐ์‚ฐ์ž = ๊ฐ’ ํ• ๋‹น a = b
+= ๋ง์…ˆ ํ›„ ํ• ๋‹น a += b // a = a + b
-= ๋บ„์…ˆ ํ›„ ํ• ๋‹น a -= b // a = a - b
*= ๊ณฑ์…ˆ ํ›„ ํ• ๋‹น a *= b // a = a * b
/= ๋‚˜๋ˆ—์…ˆ ํ›„ ํ• ๋‹น a /= b // a = a / b
%= ๋‚˜๋จธ์ง€ ํ›„ ํ• ๋‹น a %= b // a = a % b
์ฆ๊ฐ ์—ฐ์‚ฐ์ž ++ 1 ์ฆ๊ฐ€ a++ ๋˜๋Š” ++a
-- 1 ๊ฐ์†Œ a-- ๋˜๋Š” --a
๋น„๊ต ์—ฐ์‚ฐ์ž == ๊ฐ™์Œ a == b
!= ๋‹ค๋ฆ„ a != b
< ์ž‘์Œ a < b
> ํผ a > b
<= ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์Œ a <= b
>= ํฌ๊ฑฐ๋‚˜ ๊ฐ™์Œ a >= b
๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž && ๋…ผ๋ฆฌ AND a && b
|| ๋…ผ๋ฆฌ OR a || b
! ๋…ผ๋ฆฌ NOT !a
๋น„ํŠธ ์—ฐ์‚ฐ์ž & ๋น„ํŠธ AND a & b
| ๋น„ํŠธ OR a | b
^ ๋น„ํŠธ XOR a ^ b
~ ๋น„ํŠธ NOT ~a
<< ๋น„ํŠธ ์™ผ์ชฝ ์ด๋™ a << b
>> ๋น„ํŠธ ์˜ค๋ฅธ์ชฝ ์ด๋™ a >> b
์‚ผํ•ญ ์—ฐ์‚ฐ์ž ?: ์กฐ๊ฑด๋ฌธ x = (a > b) ? a : b;
๋ฉค๋ฒ„ ์ ‘๊ทผ ์—ฐ์‚ฐ์ž . ๊ฐ์ฒด ๋ฉค๋ฒ„ ์ ‘๊ทผ obj.var
-> ํฌ์ธํ„ฐ ๋ฉค๋ฒ„ ์ ‘๊ทผ ptr->var
ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์ž * ํฌ์ธํ„ฐ ์—ญ์ฐธ์กฐ *ptr
& ์ฃผ์†Œ ์—ฐ์‚ฐ์ž &var
ํ˜• ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž (type) C ์Šคํƒ€์ผ ํ˜• ๋ณ€ํ™˜ (int)a
static_cast<> ์ •์  ํ˜• ๋ณ€ํ™˜ static_cast<int>(a)
dynamic_cast<> ๋™์  ํ˜• ๋ณ€ํ™˜ dynamic_cast<Derived*>(basePtr)
const_cast<> const ์†์„ฑ ์ œ๊ฑฐ const_cast<char*>(str)
reinterpret_cast<> ํฌ์ธํ„ฐ ๋ณ€ํ™˜ reinterpret_cast<int*>(ptr)
๊ธฐํƒ€ ์—ฐ์‚ฐ์ž sizeof ํฌ๊ธฐ ๊ณ„์‚ฐ sizeof(a)
typeid ํƒ€์ž… ์ •๋ณด ๋ฐ˜ํ™˜ typeid(a).name()
, ์‰ผํ‘œ ์—ฐ์‚ฐ์ž a = (b, c)
new ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น int* p = new int;
delete ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ delete p;
new[] ๋ฐฐ์—ด ๋™์  ํ• ๋‹น int* arr = new int[10];
delete[] ๋ฐฐ์—ด ๋™์  ํ•ด์ œ delete[] arr;

 


๐ŸŸฆ C++์˜ ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„

์šฐ์„ ์ˆœ์œ„ ์—ฐ์‚ฐ์ž ์„ค๋ช… ๊ฒฐํ•ฉ ๋ฐฉํ–ฅ
1 :: ๋ฒ”์œ„ ์ง€์ • ์—ฐ์‚ฐ์ž ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ
2 () [] -> . ++ -- ํ•จ์ˆ˜ ํ˜ธ์ถœ, ๋ฐฐ์—ด, ๋ฉค๋ฒ„ ์ ‘๊ทผ, ํ›„์œ„ ์ฆ๊ฐ€/๊ฐ์†Œ ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ
3 ++ -- + - ! ~ * & sizeof new delete typeid ์ „์œ„ ์—ฐ์‚ฐ์ž, ๋ถ€ํ˜ธ, ํฌ๊ธฐ ์—ฐ์‚ฐ ๋“ฑ ์˜ค๋ฅธ์ชฝ → ์™ผ์ชฝ
4 .* ->* ๋ฉค๋ฒ„ ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์ž ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ
5 * / % ๊ณฑ์…ˆ, ๋‚˜๋ˆ—์…ˆ, ๋‚˜๋จธ์ง€ ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ
6 + - ๋ง์…ˆ, ๋บ„์…ˆ ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ
7 << >> ๋น„ํŠธ ์‹œํ”„ํŠธ ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ
8 < <= > >= ๋น„๊ต ์—ฐ์‚ฐ์ž ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ
9 == != ๋™๋“ฑ์„ฑ ๋น„๊ต ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ
10 & ๋น„ํŠธ AND ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ
11 ^ ๋น„ํŠธ XOR ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ
12 | ๋น„ํŠธOR ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ
13 && ๋…ผ๋ฆฌ AND ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ
14 || ๋…ผ๋ฆฌOR ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ
15 ?: ์‚ผํ•ญ ์กฐ๊ฑด ์—ฐ์‚ฐ์ž ์˜ค๋ฅธ์ชฝ → ์™ผ์ชฝ
16 `= += -= *= /= %= &= = ^= <<= >>=` ๋Œ€์ž… ์—ฐ์‚ฐ์ž
17 throw ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์˜ค๋ฅธ์ชฝ → ์™ผ์ชฝ
18 , ์‰ผํ‘œ ์—ฐ์‚ฐ์ž ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ

 


 

๐ŸŸฆ ์„ธ๋ฏธ์ฝœ๋ก (;)์˜ ์—ญํ• 

๐Ÿ”น enter๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Œ. ์„ธ๋ฏธ์ฝœ๋ก (;)์ด ๊ตฌ๋ฌธ์˜ ๋์„ ์•Œ๋ฆฌ๋Š” ์—ญํ• ์„ ํ•จ.
๐Ÿ”น ์ค„ ๋ฐ”๊ฟˆ ์—†์ด ์—ฌ๋Ÿฌ ๊ตฌ๋ฌธ์„ ํ•œ ์ค„์— ์จ๋„ ;๋กœ ๊ตฌ๋ถ„๋จ.

int data = 10 + 10; // 20
data + 20; // ์ €์žฅ๋˜์ง€ ์•Š๊ณ  ๊ฐ’๋งŒ ๊ณ„์‚ฐ๋จ
data = data + 20; // 40 (data += 20 ๊ณผ ๋™์ผ)

 


๐ŸŸฆ ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์ž(%)

๐Ÿ”น % ์—ฐ์‚ฐ์ž๋Š” ์ •์ˆ˜ํ˜• ํ”ผ์—ฐ์‚ฐ์ž์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
๐Ÿ”น ์‹ค์ˆ˜ํ˜•(double, float)์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒ.

int data = 10. / 3.; // 10 / 3์œผ๋กœ ๊ณ„์‚ฐ๋จ  
// ๊ฒฝ๊ณ  ๋ฐœ์ƒ: ‘double’์—์„œ ‘int’๋กœ ๋ณ€ํ™˜ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ ์†์‹ค ๊ฐ€๋Šฅ  

int data = (int)(10. / 3.); // ๋ช…์‹œ์  ํ˜• ๋ณ€ํ™˜ → ๊ฒฝ๊ณ  ์—†์Œ

 


๐ŸŸฆ ์ฆ๊ฐ ์—ฐ์‚ฐ์ž (++, --)

๐Ÿ”น ํŠน๋ณ„ํ•œ ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด ์ „์œ„(++data) ๋ฐฉ์‹ ์‚ฌ์šฉ ์ถ”์ฒœ.
๐Ÿ”น ์‹ค์ˆ˜ํ˜•์—์„œ๋Š” 1์”ฉ ์ฆ๊ฐ€/๊ฐ์†Œ.
๐Ÿ”น ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์—์„œ๋Š” 1์นธ(๋‹จ๊ณ„)์”ฉ ์ด๋™ (+๋Š” ์™ผ์ชฝ, -๋Š” ์˜ค๋ฅธ์ชฝ).

์ „์œ„ ํ›„์œ„
++data data++
๊ฐ€์žฅ ๋จผ์ € ์ ์šฉ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์ ์šฉ (๋Œ€์ž… ์—ฐ์‚ฐ์ž๋ณด๋‹ค ๋‚˜์ค‘)

 


 

๐ŸŸฆ bool ์ž๋ฃŒํ˜•

๐Ÿ”น true(1) / false(0) ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, ์—„๋ฐ€ํžˆ ๋”ฐ์ง€๋ฉด ์ •์ˆ˜ ํƒ€์ž….
๐Ÿ”น bool ๋ณ€์ˆ˜์— 0์ด ์•„๋‹Œ ์ˆซ์ž๋ฅผ ๋Œ€์ž…ํ•˜๋ฉด ์ž๋™์œผ๋กœ 1(true)๋กœ ๋ณ€ํ™˜.
๐Ÿ”น 1byte ํฌ๊ธฐ์ด์ง€๋งŒ 0๊ณผ 1๋งŒ ์ €์žฅ ๊ฐ€๋Šฅ.

bool IsTrue = 100; // 1(true) ์ €์žฅ๋จ
IsTrue = !IsTrue;  // 0(false) ์ €์žฅ๋จ

 


๐ŸŸฆ ์ œ์–ด๋ฌธ

๐Ÿ”น if, else, switch case
๐Ÿ”น switch case์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ break๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ๋ฉˆ์ถค.
๐Ÿ”น ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™” ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์‹คํ–‰๋  ์ˆ˜ ์—†๋Š” ๊ตฌ๋ฌธ์€ ์ œ๊ฑฐ๋จ.
๐Ÿ”น Debug ๋ชจ๋“œ์—์„œ๋Š” ์ตœ์ ํ™”๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์Œ.

if (false) {
  data++; // ์ตœ์ ํ™” ์˜ต์…˜ ํ™œ์„ฑํ™” ์‹œ, ์ด ๊ตฌ๋ฌธ์€ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ œ๊ฑฐ๋จ
}

 


๐ŸŸฆ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž (? :)

๐Ÿ”น if ๋ฌธ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ ๊ฐ€๋Šฅ.

int max = (a > b) ? a : b;  // a๊ฐ€ ํฌ๋ฉด a, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด b๋ฅผ ์ €์žฅ

 


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

๐Ÿ”น ๋น„ํŠธ ์—ฐ์‚ฐ์€ ๋งˆ์Šคํฌ ์ฒ˜๋ฆฌ, ์ตœ์ ํ™”๋œ ๋ฐ์ดํ„ฐ ์ €์žฅ, ์•”ํ˜ธํ™”, ๊ทธ๋ž˜ํ”ฝ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋“ฑ์—์„œ ํ™œ์šฉ๋จ. ๐Ÿš€

์—ฐ์‚ฐ์ž ์„ค๋ช… ์˜ˆ์ œ
& ๋น„ํŠธ AND a & b
| ๋น„ํŠธ OR a|b
^ ๋น„ํŠธ XOR a ^ b
~ ๋น„ํŠธ NOT ~a
<< ๋น„ํŠธ ์™ผ์ชฝ ์ด๋™ a << b
>> ๋น„ํŠธ ์˜ค๋ฅธ์ชฝ ์ด๋™ a >> b

๐ŸŸฆ C++์˜ ๋น„ํŠธ ์‹œํ”„ํŠธ (<<, >>)

๐Ÿ”น << : ์™ผ์ชฝ ์ด๋™ (๊ฐ’์ด 2^n ๋ฐฐ ์ฆ๊ฐ€)
๐Ÿ”น >> : ์˜ค๋ฅธ์ชฝ ์ด๋™ (๊ฐ’์ด 2^n ๋ฐฐ ๊ฐ์†Œ, ๋ชซ๋งŒ ๋‚จ๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ ค์ง)

unsigned char byte = 10;  
byte <<= 3; // 10 * 2^3 = 80 (2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ ์‹œ ์˜ค๋ฅธ์ชฝ์— 0์ด 3๊ฐœ ์ถ”๊ฐ€๋จ)  
byte >>= 3; // ๋‹ค์‹œ 3์นธ ์˜ค๋ฅธ์ชฝ ์ด๋™ํ•˜์—ฌ ์›๋ž˜ ๊ฐ’์œผ๋กœ ๋ณต๊ตฌ๋จ  
int ๋ณ€์ˆ˜ = a;
๋ณ€์ˆ˜ <<= m;  // a * 2^m  
๋ณ€์ˆ˜ >>= m;  // a / 2^m  (๋ชซ๋งŒ ๋‚จ์Œ)  

 


๐ŸŸฆ ์ฃผ์š” ๋น„ํŠธ ์—ฐ์‚ฐ์ž ํ™œ์šฉ ์˜ˆ์ œ

1๏ธโƒฃ ๋น„ํŠธ AND (&)

๐Ÿ”น ํŠน์ • ๋น„ํŠธ๊ฐ€ ์ผœ์ ธ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ฑฐ๋‚˜, ํŠน์ • ๋น„ํŠธ ๋„๊ธฐ
๐Ÿ”น ๋‘ ๋น„ํŠธ๊ฐ€ ๋ชจ๋‘ 1์ผ ๋•Œ๋งŒ 1์ด ๋จ

int a = 5;   // 0101  
int b = 3;   // 0011  
int c = a & b; // 0001 (1)  

// ํŠน์ • ๋น„ํŠธ๊ฐ€ 1์ธ์ง€ ํ™•์ธ  
if (a & (1 << 2)) {  // 2๋ฒˆ์งธ ๋น„ํŠธ๊ฐ€ ์ผœ์ ธ ์žˆ๋Š”์ง€ ํ™•์ธ  
    std::cout << "2๋ฒˆ์งธ ๋น„ํŠธ๊ฐ€ 1์ด๋‹ค." << std::endl;
}

// ํŠน์ • ๋น„ํŠธ ๋„๊ธฐ  
a = a & ~(1 << 2);  // 2๋ฒˆ์งธ ๋น„ํŠธ ๋„๊ธฐ  

 

2๏ธโƒฃ ๋น„ํŠธ OR (|)

๐Ÿ”น ํŠน์ • ๋น„ํŠธ๋ฅผ ์ผœ๊ฑฐ๋‚˜ ๊ฐ’ ํ•ฉ์น  ๋•Œ ์‚ฌ์šฉ
๐Ÿ”น ๋‘ ๋น„ํŠธ ์ค‘ ํ•˜๋‚˜๋ผ๋„ 1์ด๋ฉด 1์ด ๋จ

int a = 5;   // 0101  
int b = 3;   // 0011  
int c = a | b; // 0111 (7)  

// ํŠน์ • ๋น„ํŠธ ์ผœ๊ธฐ  
a = a | (1 << 2);  // 2๋ฒˆ์งธ ๋น„ํŠธ ์ผœ๊ธฐ  

 


3๏ธโƒฃ ๋น„ํŠธ XOR (^)

๐Ÿ”น ํŠน์ • ๋น„ํŠธ๋ฅผ ํ† ๊ธ€(๋ฐ˜์ „)
๐Ÿ”น ๋‘ ๋น„ํŠธ๊ฐ€ ๋‹ค๋ฅผ ๋•Œ 1์ด ๋จ

int a = 5;   // 0101  
int b = 3;   // 0011  
int c = a ^ b; // 0110 (6)  

// ํŠน์ • ๋น„ํŠธ ํ† ๊ธ€  
a = a ^ (1 << 2);  // 2๋ฒˆ์งธ ๋น„ํŠธ ๋ฐ˜์ „  

// XOR์„ ์ด์šฉํ•œ ๋‘ ์ˆ˜ ์Šค์™‘ (์ž„์‹œ ๋ณ€์ˆ˜ ์—†์ด ๊ตํ™˜)  
int x = 5, y = 7;  
x = x ^ y;  
y = x ^ y;  
x = x ^ y;  

 


4๏ธโƒฃ ๋น„ํŠธ NOT (~)

๐Ÿ”น ๋ชจ๋“  ๋น„ํŠธ๋ฅผ ๋ฐ˜์ „ (1 → 0, 0 → 1)

int a = 5;   // 0000 0101  
int c = ~a;  // 1111 1010 (2์˜ ๋ณด์ˆ˜ ํ‘œํ˜„์œผ๋กœ -6)  

// ํŠน์ • ๋น„ํŠธ ๋งˆ์Šคํฌ ๋งŒ๋“ค๊ธฐ  
int mask = ~(1 << 3); // 3๋ฒˆ์งธ ๋น„ํŠธ๋งŒ 0์œผ๋กœ ๋งŒ๋“œ๋Š” ๋งˆ์Šคํฌ  

// ์Œ์ˆ˜ ๊ฐ’ ๊ณ„์‚ฐ (2์˜ ๋ณด์ˆ˜)  
int negativeA = ~a + 1; // a์˜ ์Œ์ˆ˜ ๊ฐ’  

 


๐ŸŸฆ ์ „์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ (Preprocessing)

์ „์ฒ˜๋ฆฌ ์ง€์‹œ์–ด ์„ค๋ช… ์˜ˆ์ œ
#define ๋งคํฌ๋กœ ์ •์˜ #define PI 3.14
#undef ๋งคํฌ๋กœ ํ•ด์ œ #undef PI
#include ํ—ค๋” ํŒŒ์ผ ํฌํ•จ #include <iostream>
#ifdef ํŠน์ • ๋งคํฌ๋กœ๊ฐ€ ์ •์˜๋˜์—ˆ์„ ๋•Œ ์ฝ”๋“œ ์‹คํ–‰ #ifdef DEBUG
#ifndef ํŠน์ • ๋งคํฌ๋กœ๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์•˜์„ ๋•Œ ์ฝ”๋“œ ์‹คํ–‰ #ifndef DEBUG
#if ์กฐ๊ฑด๋ถ€ ์ปดํŒŒ์ผ #if PI > 3
#else #if, #ifdef, #ifndef๊ฐ€ ๊ฑฐ์ง“์ผ ๋•Œ ์‹คํ–‰ #else
#elif #else if์™€ ์œ ์‚ฌ, ์กฐ๊ฑด๋ถ€ ์ปดํŒŒ์ผ #elif VERSION == 2
#endif ์กฐ๊ฑด๋ถ€ ์ปดํŒŒ์ผ ๋ธ”๋ก ์ข…๋ฃŒ #endif
#pragma ์ปดํŒŒ์ผ๋Ÿฌ์— ํŠน์ • ์ง€์‹œ ์ „๋‹ฌ #pragma once
#error ๊ฐ•์ œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ #error "Unsupported compiler"
#warning ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ (GCC, Clang ์ง€์›) #warning "Deprecated feature"
## ํ† ํฐ ๊ฒฐํ•ฉ ์—ฐ์‚ฐ์ž (Token Pasting) #define CONCAT(a, b) a##b
# ๋ฌธ์ž์—ดํ™” ์—ฐ์‚ฐ์ž (Stringizing) #define STR(x) #x

 

#define์€ ํŠน์ •๊ฐ’์„ ์น˜ํ™˜ํ•œ๋‹ค.

#define ์ผ์น˜๊ฐ’ ์น˜ํ™˜๊ฐ’

์ฝ”๋“œ์— ์ผ์น˜๊ฐ’์ด ์žˆ์œผ๋ฉด ๋ชจ๋‘ ์น˜ํ™˜๊ฐ’์„ ๋„ฃ์€๊ฑธ๋กœ ์ปดํŒŒ์ผ ๋จ

#define๊ตฌ๋ฌธ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

 1. ๊ฐ€๋…์„ฑ

  ์˜ˆ์‹œ

  ์บ๋ฆญํ„ฐ์˜ ํŠน์ • ์ƒํƒœ๋ฅผ ์ƒ์ˆ˜๋กœ ์ง€์ • ๋ฐ ์‚ฌ์šฉ

  ๋ฐฐ๊ณ ํ”” 1

  ์•„ํ”” 27

  -> ์ฝ”๋“œ์— ๋ฐฐ๊ณ ํ””์ด ์žˆ์œผ๋ฉด 1๋กœ ์ปดํŒŒ์ผ ๋˜๋„๋ก ํ•จ.

 2. ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง

 

 

#include <stdio.h>



// ์ƒํƒœ ์ •์˜ (๋น„ํŠธ ํ”Œ๋ž˜๊ทธ ๋ฐฉ์‹)

#define HUNGRY 0x01 // ๋ฐฐ๊ณ ํ”” (0000 0001)

#define FULL 0x00 // ๋ฐฐ๋ถ€๋ฆ„ (๋ช…ํ™•ํ•œ ์ƒํƒœ ์—†์Œ)

#define THIRSTY 0x02 // ๋ชฉ๋งˆ๋ฆ„ (0000 0010)

#define HYDRATED 0x00 // ์ˆ˜๋ถ„ ์ถฉ๋ถ„ (๋ช…ํ™•ํ•œ ์ƒํƒœ ์—†์Œ)

#define POISONED 0x04 // ์ค‘๋…๋จ (0000 0100)

#define HEALTHY 0x00 // ๊ฑด๊ฐ•ํ•จ (๋ช…ํ™•ํ•œ ์ƒํƒœ ์—†์Œ)

#define IN_COMBAT 0x08 // ์ „ํˆฌ ์ค‘ (0000 1000)

#define STEALTH 0x10 // ์€์‹  ์ƒํƒœ (0001 0000)

#define EXHAUSTED 0x20 // ํ”ผ๋กœํ•จ (0010 0000)

#define ENERGIZED 0x40 // ํ™œ๋ ฅ ์ถฉ๋งŒ (0100 0000)

#define BLEEDING 0x80 // ์ถœํ˜ˆ ์ƒํƒœ (1000 0000)

#define INFECTED 0x100 // ๊ฐ์—ผ๋จ (0001 0000 0000)



int main()

{

unsigned int state = 0; // ์ดˆ๊ธฐ ์ƒํƒœ: ์•„๋ฌด ์ƒํƒœ๋„ ์—†์Œ



// 1. ์ƒํƒœ ์ถ”๊ฐ€ (| ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ)

state |= HUNGRY; // ๋ฐฐ๊ณ ํ”” ์ถ”๊ฐ€

state |= THIRSTY; // ๋ชฉ๋งˆ๋ฆ„ ์ถ”๊ฐ€

printf("ํ˜„์žฌ ์ƒํƒœ: %X\n", state);



// 2. ์ƒํƒœ ์ œ๊ฑฐ (& ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ)

state &= ~HUNGRY; // ๋ฐฐ๊ณ ํ”” ์ œ๊ฑฐ

printf("๋ฐฐ๊ณ ํ”” ์ œ๊ฑฐ ํ›„ ์ƒํƒœ: %X\n", state);



// 3. ํŠน์ • ์ƒํƒœ ํ™•์ธ (& ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ)

if (state & THIRSTY) {

printf("๋ชฉ๋งˆ๋ฅธ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.\n");

}



// 4. ์—ฌ๋Ÿฌ ์ƒํƒœ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ (& ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ)

if ((state & (THIRSTY | POISONED)) == (THIRSTY | POISONED)) {

printf("๋ชฉ๋งˆ๋ฅด๊ณ  ์ค‘๋…๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.\n");

}

else {

printf("๋ชฉ๋งˆ๋ฅด๊ฑฐ๋‚˜ ์ค‘๋…๋˜์ง€ ์•Š์€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.\n");

}



// 5. ์ƒํƒœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธ (!= ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ)

if (!(state & POISONED)) {

printf("์ค‘๋…๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.\n");

}



// 6. ์ƒํƒœ๋ฅผ ํ† ๊ธ€ํ•˜๊ธฐ (^ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ)

state ^= IN_COMBAT; // ์ „ํˆฌ ์ƒํƒœ ํ† ๊ธ€ (์ผœ๊ฑฐ๋‚˜ ๋„๊ธฐ)

printf("์ „ํˆฌ ์ƒํƒœ ํ† ๊ธ€ ํ›„: %X\n", state);



// 7. ์—ฌ๋Ÿฌ ์ƒํƒœ ์„ค์ • (| ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ)

state |= (POISONED | BLEEDING); // ์ค‘๋… + ์ถœํ˜ˆ ์ถ”๊ฐ€

printf("์ค‘๋… ๋ฐ ์ถœํ˜ˆ ์ถ”๊ฐ€ ํ›„ ์ƒํƒœ: %X\n", state);



return 0;

}

 

 

์บ๋ฆญํ„ฐ์˜ ์ƒํƒœ๋ฅผ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด ์˜ˆ์‹œ

๋”๋ณด๊ธฐ


1. 
๊ธฐ๋ณธ์ ์ธ ์‹ ์ฒด ์ƒํƒœ

๊ฑด๊ฐ•(HEALTHY) / ์•„ํ””(INJURED, SICK)

๋ฐฐ๊ณ ํ””(HUNGRY) / ๋ฐฐ๋ถ€๋ฆ„(FULL)

๋ชฉ๋งˆ๋ฆ„(THIRSTY) / ์ˆ˜๋ถ„์ถฉ๋ถ„(HYDRATED)

์กธ๋ฆผ(SLEEPY, DROWSY) / ๊ฐ์„ฑ(ALERT, AWAKE)

ํ”ผ๋กœ(FATIGUED, EXHAUSTED) / ํ™œ๋ ฅ(VIGOROUS, ENERGETIC)

๊ธฐ์ ˆ(FAINTED, UNCONSCIOUS) / ์ •์‹ ์ฐจ๋ฆผ(CONSCIOUS, AWARE)

์ถœํ˜ˆ(BLEEDING) / ์ถœํ˜ˆ ์—†์Œ(STABLE)

๊ณจ์ ˆ(BROKEN BONE) / ์ •์ƒ(NORMAL)

 

2. ์ •์‹  ์ƒํƒœ

์ •์‹ ์ด ๋˜๋ ทํ•จ(FOCUSED, CLEAR-MINDED) / ํ˜ผ๋ž€(CONFUSED, DISORIENTED)

๊ธฐ๋ถ„ ์ข‹์Œ(HAPPY, CHEERFUL) / ์šฐ์šธ(DEPRESSED, SAD)

๊ณตํฌ(FEARFUL, PANICKED) / ์นจ์ฐฉ(CALM, RELAXED)

๋ถ„๋…ธ(ANGRY, ENRAGED) / ํ‰์˜จ(PEACEFUL, CONTENT)

์ŠคํŠธ๋ ˆ์Šค ๋ฐ›์Œ(STRESSED, ANXIOUS) / ๋ฌด๋ค๋ค(INDIFFERENT, CAREFREE)

๊ด‘๊ธฐ(MAD, INSANE) / ์ œ์ •์‹ (SANE, STABLE)

์ง‘์ค‘(FOCUSED) / ์‚ฐ๋งŒ(DISTRACTED)

 

 

3. ์ƒ์กด ๋ฐ ํ™˜๊ฒฝ ์˜ํ–ฅ

๋”์œ„(HOT, OVERHEATED) / ์ถ”์œ„(COLD, FREEZING)

์ค‘๋…(POISONED, INTOXICATED) / ์ค‘๋… ์—†์Œ(CLEAN, DETOXED)

๊ฐ์—ผ(INFECTED) / ๋ฉด์—ญ(IMMUNE, CLEAN)

๋ฐฉ์‚ฌ๋Šฅ ์˜ค์—ผ(RADIATED) / ๋ฐฉ์‚ฌ๋Šฅ ์—†์Œ(NOT RADIATED)

์ต์‚ฌ ์ค‘(DROWNING) / ํ˜ธํก ๊ฐ€๋Šฅ(BREATHING, SAFE)

ํƒˆ์ง„(EXHAUSTED) / ํšŒ๋ณต๋จ(RESTED, RECOVERED)

์–ด๋‘  ์†(DARKNESS, BLINDED) / ๋ฐ์Œ ์†(IN LIGHT, VISIBLE)

 

 

4. ์ „ํˆฌ ๋ฐ ํ–‰๋™ ๊ด€๋ จ

์ „ํˆฌ ์ค‘(IN COMBAT, ENGAGED) / ์ „ํˆฌ ์ข…๋ฃŒ(OUT OF COMBAT, PEACEFUL)

์Šคํ…”์Šค ์ƒํƒœ(STEALTH, HIDDEN) / ๋ฐœ๊ฐ๋จ(DETECTED, VISIBLE)

๋ฌด์žฅ(DISARMED, UNARMED) / ๋ฌด๊ธฐ ์žฅ์ฐฉ(ARMED, READY)

๊ธฐ์ ˆ(STUNNED, KNOCKED OUT) / ํ™œ๋™ ๊ฐ€๋Šฅ(ACTIVE, ALERT)

์†๋ฐ•๋จ(RESTRAINED, GRAPPLED) / ์ž์œ (FREE, MOBILE)

์ €์ง€๋จ(STAGGERED, INTERRUPTED) / ํ–‰๋™ ๊ฐ€๋Šฅ(UNSTOPPED, UNHINDERED)

๊ธฐํšŒ ํƒ€์ด๋ฐ(OPPORTUNE, ADVANTAGEOUS) / ๋ถˆ๋ฆฌํ•œ ์ƒํƒœ(DISADVANTAGED, VULNERABLE)

 

 

5. ๊ธฐํƒ€ ์ƒํƒœ

๋ฒ„ํ”„(ENHANCED, BUFFED) / ๋””๋ฒ„ํ”„(DEBUFFED, WEAKENED)

์ถ•๋ณต๋ฐ›์Œ(BLESSED) / ์ €์ฃผ๋ฐ›์Œ(CURSED)

๊ด‘ํญํ™”(BERSERK, RAGING) / ๋ƒ‰์ •(COOL-HEADED)

๋„์›€๋ฐ›์Œ(AIDED, ASSISTED) / ๊ณ ๋ฆฝ๋จ(ISOLATED, ALONE)

์‹œ๊ฐ„ ๋А๋ฆผ(SLOWED, SLUGGISH) / ์‹œ๊ฐ„ ๋น ๋ฆ„(HASTED, QUICKENED)

 

 

ํ™œ์šฉ ์˜ˆ์‹œ

๋น„ํŠธ๋งˆ์Šคํฌ ๋ฐฉ์‹์œผ๋กœ ์ƒํƒœ๋ฅผ ์ •์˜ํ•  ๊ฒฝ์šฐ:

#define HUNGRY 1 // 00000001

#define FULL 2 // 00000010

#define THIRSTY 4 // 00000100

#define HYDRATED 8 // 00001000

#define POISONED 16 // 00010000

#define HEALTHY 32 // 00100000

#define IN_COMBAT 64 // 01000000

#define STEALTH 128 // 10000000

 

 

 

๋น„ํŠธ ํ”Œ๋ž˜๊ทธ ๋ฐฉ์‹ ์™ธ์— ์ƒํƒœ ์ •์˜ ๋ฐฉ๋ฒ•.

1. ๋น„ํŠธ ํ”Œ๋ž˜๊ทธ ๋ฐฉ์‹ (Bit Flags)

์—ฌ๋Ÿฌ ์ƒํƒœ๋ฅผ ๋™์‹œ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ (๋น„ํŠธ ์—ฐ์‚ฐ ํ™œ์šฉ).

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๊ณ , ๋น ๋ฅธ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅ.

๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์ ํ•ฉ.

#include <stdio.h>
// ์ƒํƒœ ์ •์˜ (๋น„ํŠธ ํ”Œ๋ž˜๊ทธ ๋ฐฉ์‹)
#define HUNGRY 0x01 // 0000 0001
#define THIRSTY 0x02 // 0000 0010
#define POISONED 0x04 // 0000 0100
#define IN_COMBAT 0x08 // 0000 1000

int main() {
	unsigned int state = 0; // ์ดˆ๊ธฐ ์ƒํƒœ (์•„๋ฌด ์ƒํƒœ๋„ ์—†์Œ)

	// ์ƒํƒœ ์ถ”๊ฐ€
	state |= HUNGRY | THIRSTY;
	printf("ํ˜„์žฌ ์ƒํƒœ: %X\n", state);

	// ์ƒํƒœ ์ œ๊ฑฐ
	state &= ~HUNGRY;
	printf("๋ฐฐ๊ณ ํ”” ์ œ๊ฑฐ ํ›„ ์ƒํƒœ: %X\n", state);

	// ์ƒํƒœ ํ™•์ธ
	if (state & THIRSTY) {
		printf("๋ชฉ๋งˆ๋ฅธ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.\n");
	}

	return 0;
}

โœ… ์‚ฌ์šฉ ์ƒํ™ฉ:

๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ์˜ ๋‹ค์–‘ํ•œ ์ƒํƒœ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ๋•Œ

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ ์ƒํƒœ๋ฅผ ๋™์‹œ์— ๊ด€๋ฆฌํ•  ๋•Œ

 

 

2. ์—ด๊ฑฐํ˜• ๋ฐฉ์‹ (Enum)

์ƒํƒœ๋ฅผ ์—ด๊ฑฐํ˜•์œผ๋กœ ์ •์˜ํ•˜์—ฌ ๊ฐ€๋…์„ฑ์ด ์ข‹์Œ.

๋‹จ์ผ ์ƒํƒœ ๊ด€๋ฆฌ์— ์ ํ•ฉ (๋ณตํ•ฉ ์ƒํƒœ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Œ).

#include <stdio.h>
// ์—ด๊ฑฐํ˜•์œผ๋กœ ์ƒํƒœ ์ •์˜
typedef enum {
	STATE_HUNGRY,
	STATE_THIRSTY,
	STATE_POISONED,
	STATE_IN_COMBAT
} CharacterState;

int main() {
	CharacterState state = STATE_HUNGRY; // ์ดˆ๊ธฐ ์ƒํƒœ: ๋ฐฐ๊ณ ํ””

	// ์ƒํƒœ ๋ณ€๊ฒฝ
	state = STATE_THIRSTY;
	printf("ํ˜„์žฌ ์ƒํƒœ: %d\n", state);

	// ์ƒํƒœ ํ™•์ธ
	if (state == STATE_THIRSTY) {
		printf("๋ชฉ๋งˆ๋ฅธ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.\n");
	}

	return 0;
}

 

โœ… ์‚ฌ์šฉ ์ƒํ™ฉ:

ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ƒํƒœ๋งŒ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ์‹ถ์„ ๋•Œ

 

3. ๊ตฌ์กฐ์ฒด ๋ฐฉ์‹ (Struct)

์—ฌ๋Ÿฌ ์ƒํƒœ ๊ฐ’์„ ๊ฐœ๋ณ„ ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ.

๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์šฐ๋‚˜, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ๋งŽ์•„์งˆ ์ˆ˜ ์žˆ์Œ.

#include <stdio.h>
// ๊ตฌ์กฐ์ฒด๋กœ ์ƒํƒœ ์ •์˜
typedef struct {
	int isHungry;
	int isThirsty;
	int isPoisoned;
	int isInCombat;
} Character;

int main() {
	Character player = { 1, 0, 0, 1 }; // ๋ฐฐ๊ณ ํ””, ์ „ํˆฌ ์ค‘

	// ์ƒํƒœ ํ™•์ธ
	if (player.isHungry) {
		printf("๋ฐฐ๊ณ ํ”ˆ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.\n");
	}

	// ์ƒํƒœ ๋ณ€๊ฒฝ
	player.isHungry = 0;
	printf("๋ฐฐ๊ณ ํ”” ์ œ๊ฑฐ\n");

	return 0;
}

โœ… ์‚ฌ์šฉ ์ƒํ™ฉ:

์ƒํƒœ๊ฐ€ ๋งŽ๊ณ , ๊ฐ ์ƒํƒœ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ๋•Œ

๊ฐœ๋ณ„ ์ƒํƒœ์˜ ๊ฐ’์„ ์กฐ์ •ํ•ด์•ผ ํ•  ๋•Œ

 

4. ๋ฐฐ์—ด ๋ฐฉ์‹ (Array/Set)

์ƒํƒœ๋ฅผ ๋ฐฐ์—ด ๋˜๋Š” ์ง‘ํ•ฉ(Set) ํ˜•ํƒœ๋กœ ์ €์žฅ.

ํŠน์ • ์ƒํƒœ๋ฅผ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€/์ œ๊ฑฐ ๊ฐ€๋Šฅ.

๊ฒ€์ƒ‰ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์†๋„๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆด ์ˆ˜ ์žˆ์Œ.

#include <stdio.h>
#include <string.h>

#define MAX_STATES 10

const char* STATES[] = { "HUNGRY", "THIRSTY", "POISONED", "IN_COMBAT" };

// ์ƒํƒœ ๋ฆฌ์ŠคํŠธ ๊ด€๋ฆฌ
typedef struct {
    char states[MAX_STATES][20]; // ๊ฐ ์ƒํƒœ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•  ๋ฐฐ์—ด
    int count;
} StateList;

// ์ƒํƒœ ์ถ”๊ฐ€
void addState(StateList* list, const char* state) {
    if (list->count < MAX_STATES) {
        strcpy(list->states[list->count], state);
        list->count++;
    }
}

// ์ƒํƒœ ์ถœ๋ ฅ
void printStates(StateList* list) {
    printf("ํ˜„์žฌ ์ƒํƒœ: ");
    for (int i = 0; i < list->count; i++) {
        printf("%s ", list->states[i]);
    }
    printf("\n");
}

int main() {
    StateList player;
    memset(&player, 0, sizeof(StateList));  // ๊ตฌ์กฐ์ฒด ์ „์ฒด๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”

    addState(&player, "HUNGRY");
    addState(&player, "IN_COMBAT");

    printStates(&player);

    return 0;
}

 

โœ… ์‚ฌ์šฉ ์ƒํ™ฉ:

๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ๋•Œ

ํŠน์ • ์ƒํƒœ๋ฅผ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€/์‚ญ์ œํ•ด์•ผ ํ•  ๋•Œ

 

 

๐Ÿ” ๋น„๊ต ์š”์•ฝ

๋ฐฉ์‹ ์žฅ์  ๋‹จ์  ์‚ฌ์šฉ ์˜ˆ์‹œ
๋น„ํŠธ ํ”Œ๋ž˜๊ทธ ๋น ๋ฅด๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ ํ•ด์„์ด ์–ด๋ ค์›€ ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ ์ƒํƒœ ๊ด€๋ฆฌ
์—ด๊ฑฐํ˜• (Enum) ๊ฐ€๋…์„ฑ์ด ์ข‹์Œ ์—ฌ๋Ÿฌ ์ƒํƒœ ๋™์‹œ ๊ด€๋ฆฌ ์–ด๋ ค์›€ ๋‹จ์ผ ์ƒํƒœ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
๊ตฌ์กฐ์ฒด (Struct) ๊ฐœ๋ณ„ ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ฆ๊ฐ€ ์ƒํƒœ๋ณ„ ์„ธ๋ถ€ ์กฐ์ • ํ•„์š”ํ•  ๋•Œ
๋ฐฐ์—ด/์ง‘ํ•ฉ (Array/Set) ์ƒํƒœ ์ถ”๊ฐ€/์‚ญ์ œ ์œ ์—ฐ ๊ฒ€์ƒ‰ ์‹œ ์†๋„ ์ €ํ•˜ ๊ฐ€๋Šฅ ๊ฐ€๋ณ€์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ