์ฐธ๊ณ ์์ : https://youtu.be/VtqhZQP7T4c
1๋ฐ์ดํธ๋ 8๋นํธ์ด๋ค. ๋ฐ์ดํฐํ์์ ํฌ๊ธฐ๋ ๋ชจ๋ '๋ฐ์ดํธ'๋จ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
๋นํธ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๊ธด๋ค. ๋นํธ ์ฐ์ฐ์๋ฅผ ์ด๋ฅผ ์ํ ์ฐ์ฐ์์ด๋ค.
1) ์ํํธ ์ฐ์ฐ์ : ๋นํธ๋ฅผ ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํค๋ ์ฐ์ฐ์
๋นํธ๋ฅผ ์ด๋์ํฌ ๋๋ ๊ท์น์ด ์๋ค.
๋ฐ๋ ค์ ๋น ์ ธ๋์จ ๋นํธ๋ ๊ณผ๊ฐํ๊ฒ ๋ฒ๋ฆฐ๋ค.
์์์ ๋ํ ์ํํธ ์ฐ์ฐ์๋ ๋น๊ฒ๋ ๋นํธ ๋งํผ 0์ ์ฑ์ ๋ฃ๋๋ค.
์์์ ๋ํ ์ํํธ ์ฐ์ฐ์๋ ๋น๊ฒ๋ ๋นํธ ๋งํผ 1์ ์ฑ์ ๋ฃ๋๋ค.
int a = 240; // 00000000 00000000 00001111 00000000
int resultl_1 = a << 2; // 00000000 00000000 00111100 00000000
int result_2 = a >> 2; // 00000000 00000000 00000011 11000000
240(0000 0000 1111 0000)์ ์ผ์ชฝ์ผ๋ก 2๋นํธ ์ํํธํ ๊ฒฐ๊ณผ๋
960(0000 0011 1100 0000)์ด๊ณ ๋ฐ๋๋ก 2๋นํธ ์ํํธํ ๊ฒฐ๊ณผ๋ 60์ด์๋ค.
์๋ณธ ๋ฐ์ดํฐ๋ฅผ a, ์ฎ๊ธด ๋นํธ ์๋ b๋ผ๊ณ ํ ๋,
์ผ์ชฝ ์ํํธ ์ฐ์ฐ์ ํ๋ฉด aX2(b ์ ๊ณฑ)์ ๊ฒฐ๊ณผ๊ฐ,
์ค๋ฅธ์ชฝ ์ํํธ ์ฐ์ฐ์ ํ๋ฉด a % 2(b ์ ๊ณฑ)์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
(์ด ์ ์ ์ด์ฉํด์ ์ํํธ ์ฐ์ฐ์ ๊ณ ์์ ๊ณฑ์ ๊ณผ ๋๋์ ์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋๊ธฐ๋ ํ๊ณ
&์ฐ์ฐ์, | ์ฐ์ฐ์์ ํจ๊ป byte์ฒ๋ผ ์์ ๋จ์๋ก ์ชผ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ๋ค์ ํ๋์ int๋ long ํ์์ผ๋ก
์ฌ์กฐ๋ฆฝํ๋๋ฐ ์ฌ์ฉ๋๊ธฐ๋ ํ๋ค.)
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace Hello
{
class MainApp
{
static void Main(string[] args)
{
WriteLine("Testing <<");
int a = 1;
WriteLine("a : {0:D5} (0x{0:X8})", a);
WriteLine("a << 1 : {0:D5} (0x{0:X8})",a<<1);
WriteLine("a << 2 : {0:D5} (0x{0:X8})", a<<2);
WriteLine("a << 5 : {0:D5} (0x{0:X8})", a<<5);
WriteLine("Testing >>");
int b = 255;
WriteLine("a : {0:D5} (0x{0:X8})", b);
WriteLine("a >> 1 : {0:D5} (0x{0:X8})", b >> 1);
WriteLine("a >> 2 : {0:D5} (0x{0:X8})", b >> 2);
WriteLine("a >> 5 : {0:D5} (0x{0:X8})", b >> 5);
WriteLine("Testing >>");
int c = -255;
WriteLine("a : {0:D5} (0x{0:X8})", c);
WriteLine("a >> 1 : {0:D5} (0x{0:X8})", c >> 1);
WriteLine("a >> 2 : {0:D5} (0x{0:X8})", c >> 2);
WriteLine("a >> 5 : {0:D5} (0x{0:X8})", c >> 5);
}
}
}
์ถ๋ ฅ๊ฒฐ๊ณผ
Testing <<
a : 00001 (0x00000001)
a << 1 : 00002 (0x00000002)
a << 2 : 00004 (0x00000004)
a << 5 : 00032 (0x00000020)
Testing >>
a : 00255 (0x000000FF)
a >> 1 : 00127 (0x0000007F)
a >> 2 : 00063 (0x0000003F)
a >> 5 : 00007 (0x00000007)
Testing >>
a : -00255 (0xFFFFFF01)
a >> 1 : -00128 (0xFFFFFF80)
a >> 2 : -00064 (0xFFFFFFC0)
a >> 5 : -00008 (0xFFFFFFF8)
1) ๋นํธ๋ ผ๋ฆฌ ์ฐ์ฐ์ : ๋นํธ ๋ ผ๋ฆฌ ์ฐ์ฐ์๋ ์ ์ ํ์์ ๋ํด์๋ ๋ ผ๋ฆฌ ์ฐ์ฐ์ ํ๋ค.
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ 0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง๋ค.
int ํ์ ๋ฐ์ดํฐ๋ 4๋ฐ์ดํธ ์ฆ 32๊ฐ์ ๋นํธ๋ก ์ด๋ฃจ์ด์ง๊ณ
long ํ์ ๋ฐ์ดํฐ๋ 64๊ฐ์ ๋นํธ(8๋ฐ์ดํธ)๋ก ์ด๋ฃจ์ด์ง๋ค.
๋นํธ ๋ ผ๋ฆฌ ์ฐ์ฐ์ ์ด ๋นํธ ๋ฉ์ด๋ฆฌ๋ฅผ ์ด๋ฃจ๊ณ ์๋ ๊ฐ ๋นํธ์ ๋ํด 1์ ์ฐธ, 0์ ๊ฑฐ์ง์ผ๋ก ํด์ ๋ ผ๋ฆฌ ์ฐ์ฐ์ ํ๋ค.
& | ๋ ผ๋ฆฌ๊ณฑ(AND) ์ฐ์ฐ์ |
| | ๋ ผ๋ฆฌํฉ(OR) ์ฐ์ฐ์ |
^ | ๋ฐฐํ์ ๋ ผ๋ฆฌํฉ(XOR) ์ฐ์ฐ์ |
~ | ๋ณด์(NOT) ์ฐ์ฐ์ : ํผ์ฐ์ฐ์์ ๋นํธ์ ๋ํด 0์ 1๋ก, 1์ 0์ผ๋ก ๋ฐ์ ์ํจ๋ค. ๋จํญ ์ฐ์ฐ์์ด๋ค. |
9์ 10์ ๋ ผ๋ฆฌ๊ณฑ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ด 1000(10์ง์๋ก๋ 8์ด ๋๋ค.)
๋ ผ๋ฆฌ๊ณฑ์์๋ ๋ ์ค ๋ชจ๋๊ฐ ์ฐธ(1)์ด์ด์ผ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ์ฐธ(1)์ด๋ค.
9 : 1 0 0 1
&&&&
10: 1 0 1 0
8 : 1 0 0 0 (๊ฒฐ๊ณผ)
int result = 9 & 10; //result๋ 8
9์ 10์ ๋ ผ๋ฆฌํฉ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ด 1011(10์ง์๋ก๋ 11์ด ๋๋ค.)
๋ ผ๋ฆฌํฉ์์๋ ๋ ์ค ํ๋๋ผ๋ ์ฐธ(1)์ด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ ์ฐธ(1)์ด๋ค.
9 : 1 0 0 1
| | | |
10: 1 0 1 0
11 :1 0 1 1 (๊ฒฐ๊ณผ)
int result = 9 | 10; //result๋ 11
9์ 10์ ๋ฐฐํ์ ๋ ผ๋ฆฌํฉ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ด 0011(10์ง์๋ก๋ 3์ด ๋๋ค.)
๋ฐฐํ์ ๋ ผ๋ฆฌํฉ์์๋ ๋ ์ค ๋ชจ๋๊ฐ ๋ฌ๋ผ์ผ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ์ฐธ(1)์ด๋ค.
๋๊ฐ(๋ ํผ์ฐ์ฐ์์ ์ง๋ฆฟ๊ฐ)๊ฐ ๊ฐ์ผ๋ฉด ๊ฑฐ์ง(0)์ด๋ค.
9 : 1 0 0 1
^ ^ ^^
10: 1 0 1 0
3 : 0 0 1 1 (๊ฒฐ๊ณผ)
int result = 9 ^ 10; //result๋ 3
9์ 10์ ๋ณด์ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ด 0011(10์ง์๋ก๋ 3์ด ๋๋ค.)
~๋ ํผ์ฐ์ฐ์๊ฐ ํ๋๋ฟ์ธ ๋จํญ ์ฐ์ฐ์๋ก์ ๋นํธ๋ฅผ 0์์ 1๋ก,
1์์ 0์ผ๋ก ๋ค์ง๋ ๊ธฐ๋ฅ์ ํ๋ค.
์๋ฅผ ๋ค์ด ํฌ๊ธฐ๊ฐ 32๋นํธ์ธ int ํ์์ ๋ณ์ a๋ฅผ ์ ์ธํ๊ณ 255๋ก ์ด๊ธฐํํ๋ค.
255๋ฅผ ๋ด์ a์ ๋นํธ๋ 00000000 00000000 00000000 11111111์ด ๋๊ณ
์ด ๋นํธ ํจํด์์ 0์ 1๋ก, 1์ 0์ผ๋ก ๋ฐ๊พธ๋ฉด 11111111 11111111 11111111 00000000 ์ด ๋๋ค.
int a = 255;
int result = ~a; //result๋ -256
<์ต์ข ์์ค์ฝ๋>
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace Hello
{
class MainApp
{
static void Main(string[] args)
{
int a = 9;
int b = 10;
WriteLine($"{a} & {b} : {a&b}"); //9 & 10 : 8
WriteLine($"{a} | {b} : {a|b}"); //9 | 10 : 11
WriteLine($"{a} ^ {b} : {a^b}"); //9 ^ 10 : 3
int c = 255;
WriteLine("{0}(0x{0:X8})",c,~c); //255(0x000000FF)
WriteLine("{1}(0x{1:X8})", c, ~c); //-256(0xFFFFFF00)
}
}
}
<์ถ๋ ฅ>
9 & 10 : 8
9 | 10 : 11
9 ^ 10 : 3
255(0x000000FF)
-256(0xFFFFFF00)
'C# > ์ด๊ฒ์ด C#์ด๋ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
14. ์ ์ถ๋ ฅ, ๋ถ๊ธฐ๋ฌธ (0) | 2022.02.08 |
---|---|
13. null ๋ณํฉ ์ฐ์ฐ์ (0) | 2022.02.08 |
11. null ์กฐ๊ฑด๋ถ ์ฐ์ฐ์ (0) | 2022.02.08 |
10. ๋ฌธ์์ด ๋ค๋ฃจ๊ธฐ (0) | 2022.02.07 |
9. ๊ณต์ฉ ํ์ ์์คํ (0) | 2022.02.07 |