ํฌ์ŠคํŠธ

๐ŸŒ’ ๋น„ํŠธ ์—ฐ์‚ฐ, ์‹œํ”„ํŠธ ์—ฐ์‚ฐ

๐Ÿ’ซ ๊ณตํ†ต


์ •์ˆ˜ํ˜• ๋ฐ์ดํ„ฐ์˜ ์—ฐ์‚ฐ๋งŒ ๊ฐ€๋Šฅ (์‹ค์ˆ˜ํ˜• ๋ฐ์ดํ„ฐ X)

  • And, Or, Not, Exclusive-Or/XOR
  • Bit Operator, Bit Operation & | ~ ^
  • Bit Vector, ๊ธธ์ด w์˜ 0/1๋กœ ๊ตฌ์„ฑ๋œ ๋ฐ์ดํ„ฐ
  • ๋น„ํŠธ ๋ฒกํ„ฐ๋ฅผ ์ด์šฉํ•œ ์ง‘ํ•ฉ์˜ ํ‘œํ˜„๊ณผ ์šด์˜ (๋น„ํŠธ ์—ฐ์‚ฐ)

  • Bit ์ธ์ž(ํ”ผ์—ฐ์‚ฐ์ž)๋“ค์„ Bit Vector๋กœ์จ ๋น„ํŠธ ๋‹จ์œ„ ์—ฐ์‚ฐ Bit Wise Operate
  • ๋งˆ์Šคํฌ ์—ฐ์‚ฐ
    • ์ผ์ข…์˜ ๋น„ํŠธ ํŒจํ„ด์œผ๋กœ, ์›ํ•˜๋Š” ๋น„ํŠธ๋ฅผ ์ถ”์ถœ
    • ์›Œ๋“œ ์ค‘ ์ผ๋ถ€ ์„ ํƒ๋œ ๋น„ํŠธ ์ง‘ํ•ฉ
  • ๋น„ํŠธ ์—ฐ์‚ฐ์ž vs ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž
    • || OR, && AND, ! NOT
    • 0 = false, !0 = true
    • ํ•ญ์ƒ 0์ด๋‚˜ 1 ์‚ฐ์ถœ
    • Early termination
      • Short-Circuit Evaluation
        • p && *p, avoids null pointer access
      • ๋ฐ˜๋ฉด ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋Š” ๋ชจ๋‘ ์—ฐ์‚ฐ

2.1.9 C์˜ ๋น„ํŠธ์ด๋™ ์—ฐ์‚ฐ

  • ์ขŒ์ธก ์ด๋™ x ยซย k
    • ์™ผ์ชฝ ์ดˆ๊ณผ ๋น„ํŠธ๋“ค์€ ๋ฒ„๋ฆผ
    • ์šฐ์ธก 0๋กœ ์ฑ„์›€
  • ์šฐ์ธก ์ด๋™ xย ยป k
    • ์˜ค๋ฅธ์ชฝ ์ดˆ๊ณผ ๋น„ํŠธ๋“ค์€ ๋ฒ„๋ฆผ
    • ๋…ผ๋ฆฌ ์‰ฌํ”„ํŠธ, ์™ผ์ชฝ 0๋กœ ์ฑ„์›€
    • ์‚ฐ์ˆ  ์‰ฌํ”„ํŠธ, ์˜ค๋ฅธ์ชฝ ์ตœ์ƒ์œ„ ๋น„ํŠธ ๋ณต์ œ
      • 2์˜ ๋ณด์ˆ˜ ์ •์ˆ˜ ํ‘œํ˜„์— ์œ ์šฉ

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


๐Ÿซง &

AND, ๋น„ํŠธ AND ์—ฐ์‚ฐ์ž
์–‘์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ ๋น„ํŠธ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์–‘์ชฝ ๋ชจ๋‘ 1์ด๋ฉด 1, ์•„๋‹ˆ๋ผ๋ฉด 0์œผ๋กœ ์„ค์ •.

1
2
3
4
5
6
int x = 3;
//      3, ...0011
int y = 5;
//      5, ...0101
int z = x & y;
//      1, ...0001

๐Ÿซง ^

  • XOR, ํฌ๊ด„์  ๋น„ํŠธ XOR ์—ฐ์‚ฐ์ž, (eXclusive OR)
  • ์–‘์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ ๋น„ํŠธ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅด๋ฉด 1, ์•„๋‹ˆ๋ผ๋ฉด 0์œผ๋กœ ์„ค์ •.
1
2
3
4
5
6
int x = 3;
//      3, ...0011
int y = 5;
//      5, ...0101
int z = x ^ y;
//      6, ...0110

๐Ÿซง |

  • OR, ๋ฐฐํƒ€์  ๋น„ํŠธ OR ์—ฐ์‚ฐ์ž
  • ์–‘์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ ๋น„ํŠธ๋ฅผ ๋น„๊ตํ•˜์—ฌ ํ•œ ์ชฝ์ด๋ผ๋„ 1์ด๋ฉด 1, ์•„๋‹ˆ๋ผ๋ฉด 0์œผ๋กœ ์„ค์ •.
  • Shift + ์—ญ์Šฌ๋ž˜์‹œ (Enter ์œ„์— ์žˆ๋Š” ํ‚ค, โ‚ฉ) ๋กœ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Œ.
1
2
3
4
5
6
int x = 3;
//      3, ...0011
int y = 5;
//      5, ...0101
int z = x | y;
//      7, ...0111

๐Ÿซง ~

  • NOT, ๋น„ํŠธ ๋ณด์ˆ˜(๋˜๋Š” ๋น„ํŠธ NOT) ์—ฐ์‚ฐ์ž
  • ํ”ผ์—ฐ์‚ฐ์ž์˜ ๋น„ํŠธ ๋ณด์ˆ˜๋ฅผ ๋งŒ๋“ฆ (0์—์„œ 1, 1์—์„œ 0์œผ๋กœ ์ˆ˜๋ฅผ ๋’ค์ง‘์Œ)
  • ์—ฌ๋‹ด์œผ๋กœ, ~ ๋Š” ๋‹จํ•ญ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž๋กœ ๋ถ„๋ฅ˜๋จ. (MSDC ๊ธฐ์ค€)
1
2
3
4
int x = 15;
//      15, ...0000'0000'0000'1111
int y = ~x;
//     -16, ...1111'1111'1111'0000

๐Ÿ’ซ ๋น„ํŠธ ์‹œํ”„ํŠธ ์—ฐ์‚ฐ์ž


  • ์ฃผ์˜ ํ•  ์ 
    • ๋น„ํŠธ ์‹œํ”„ํŠธ ์—ฐ์‚ฐ์ž๋กœ ์ˆ˜ํ–‰๋œ ๋ณ€ํ™˜์€ ์˜ค๋ฒ„ํ”Œ๋กœ, ์–ธ๋”ํ”Œ๋กœ ์กฐ๊ฑด์„ ์ง€์›ํ•˜์ง€ ์•Š์Œ.
      • ๋•Œ๋ฌธ์— ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ,
      • ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ •๋ณด๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ์Œ.

๐Ÿซง ยซ

  • ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋‘ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž ๋งŒํผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™.
  • ๊ณ„์‚ฐ์— ์˜ค๋ฒ„ํ”Œ๋กœ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž์— 2๋‘ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž ๋ฅผ ๊ณฑํ•œ ๊ฐ’๊ณผ ๊ฐ™์Œ.
  • ์‹œํ”„ํŠธ ์ดํ›„ ๋น„์›Œ์ง„ ๋น„ํŠธ๋Š” 0 ์œผ๋กœ ์„ค์ •๋จ.
1
2
3
4
5
int x = 15;
//      15,  ...0000'0000'0000'1111
int y = x << 4;
//      240, ...0000'0000'1111'0000
//      240 = 15 * 2^4

๐Ÿซงย ยป

  • ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋‘ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž ๋งŒํผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™.
  • ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ๋ถ€ํ˜ธ๊ฐ€ ์—†๊ฑฐ๋‚˜, ์Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ, 2๋‘ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž ๋กœ ๋‚˜๋ˆˆ ๊ฐ’๊ณผ ๊ฐ™์Œ.
  • ์‹œํ”„ํŠธ ์ดํ›„ ๋น„์›Œ์ง„ ๋น„ํŠธ๋Š” ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž์˜ ํ˜•์‹์— ๋”ฐ๋ผ ์ฑ„์›Œ์ง.
    • ๋ถ€ํ˜ธ ์—†๋Š” unsigned ํ˜•์‹์ด๋ฉด, 0์œผ๋กœ ์ฑ„์›Œ์ง (์ตœ์ƒ์œ„ ๋น„ํŠธ ์„ค์ • ํ•ด์ œ)
    • ๋ถ€ํ˜ธ ์žˆ๋Š” ํ˜•์‹์ด๋ผ๋ฉด ๋ถ€ํ˜ธ ๋น„ํŠธ๊ฐ€ ๋ณต์‚ฌ๋˜์—ฌ ์ฑ„์›Œ์ง. ์–‘์ˆ˜ 0, ์Œ์ˆ˜ 1 (์ตœ์ƒ์œ„ ๋น„ํŠธ ์„ค์ •๋œ ์ฑ„ ์œ ์ง€)
1
2
3
4
5
int x = 240;
//      240, ...0000'0000'1111'0000
int y = x >> 4;
//      15,  ...0000'0000'0000'1111
//      15 = 240 / 2^4
  • ์Œ์ˆ˜ ๊ฐ’์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ์›๋ž˜ ๊ฐ’์˜ ๋ฐ˜์„ ์ •์ˆ˜๋กœ ๋‚ด๋ฆผํ•œ ๊ฐ’์ด ์ƒ์„ฑ๋จ.
    • -253 (11111111 00000011) ์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋น„ํŠธ ์ด๋™ํ•˜๋ฉด,
    • -127 (11111111 10000001) ์ด ์ƒ์„ฑ๋จ.
    • 253 (00000000 11111101) ์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋น„ํŠธ ์ด๋™ํ•˜๋ฉด,
    • 126 (00000000 01111110) ์ด ์ƒ์„ฑ๋จ.

๐Ÿ’ซ ํ• ๋‹น ์—ฐ์‚ฐ์ž


  • ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ• ๋‹น ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๊ฐ’ ๋ณ€ํ˜•๊ณผ ํ• ๋‹น์„ ๋™์‹œ์— ํ•  ์ˆ˜ ์žˆ์Œ.
    • &=
    • ^=
    • |=
    • ~ ๋Š” ๋‹จํ•ญ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž๋ผ ํ• ๋‹น ์—ฐ์‚ฐ์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ.
    • <<=
    • >>=

๐Ÿ’ซ ์ฐธ๊ณ 


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

& = ?

์›น์—์„œ ๊ณ„์‚ฐ๊ธฐ ๋งŒ๋“ค๊ธฐ

1
2
3
(value >> 16) & byte.MaxValue
(value >> 8) & byte.MaxValue
(value >> 0) & byte.MaxValue
์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.