비트연산에 대해 알아보겠습니다. 정확히는 bitwise연산입니다. 비트에 대한 값을 연산하는 부분으로 이진수에 대한 데이터를 연산처리합니다.
1. AND연산
AND연산은 두개의 비트가 1인경우에 1을 처리합니다. 그 외의 경우는 0으로 처리됩니다.
2. OR연산
OR연산은 두개의 비트 중 하나라도 1이면 1로 표기하고 , 두 비트가 모두 0인경우에는 0으로 표기합니다.
3. XOR연산
XOR연산은 두개의 비트가 값이 같으면 0으로, 다르면 1로 표기합니다. XOR연산은 매번 해깔리긴합니다.
4. NOT연산
NOT연산은 비트값을 반전시키면 됩니다.
5. 쉬프트연산(왼쪽)
쉬프트 연산은 비트를 지정한 숫자 만큼 이동 시킵니다. 왼쪽 쉬프트 << 는 왼쪽으로 이동시킵니다. 아래는 왼쪽으로 2칸 쉬프트한 부분입니다. 2진법이므로 왼쪽으로 1칸씩 이동할때마다 2배씩 증가되는 것을 확인 할수 있습니다. 아래부분을 보면 << 1을 한경우 6 * 2 =12 , << 2 의경우는 6 * 2 * 2 = 24가 되는것을 확인 할 수 있습니다.
5. 쉬프트연산(오른쪽)
오른쪽으로 쉬프트 연산을 하는 경우는 비트를 오른쪽으로 이동합니다. 이 경우에는 왼쪽 쉬프트연산자와 반대로 2로 나눗값과 동일한것을 확인 할수 있습니다. >> 1은 6/2 =3 , >>2는 6/2 = 3/2 = 1.5 인데 소수점은 버림처리되어 1로 처리됩니다.
저 같은 경우는 쉬프트 연산의 경우 오른쪽, 왼쪽 쉬프트를 헤깔리는 경우가 있는데 화살표라고 생각하고 나니 그나마 좀 덜 헤깔려서 화살표방향으로 기억하고 있습니다.
소스코드
예제 코드를 만들어 보겠습니다. 6, 12 숫자 2개를 가지고 여러가지 비트연산을 출력해보는 소스입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
using System;
namespace BitOperator
{
class Program
{
static void Main(string[] args)
{
int num1 = 6; //bin : 0110
int num2 = 12; //bin : 1100
int result;
//AND연산 '&'
result = num1 & num2;
Console.WriteLine($"num1 & num2 = {result,5} bin:{Convert.ToString(result, 2)}");
//OR연산 '|'
result = num1 | num2;
Console.WriteLine($"num1 | num2 = {result,5} bin:{Convert.ToString(result, 2)}");
//XOR연산
result = num1 ^ num2;
Console.WriteLine($"num1 ^ num2 = {result,5} bin:{Convert.ToString(result, 2)}");
//NOT연산
result = ~num1;
Console.WriteLine($"~num1 = {result,5} bin:{Convert.ToString(result, 2)}");
//Shift연산 (왼쪽 2칸) result = num1 << 2;
Console.WriteLine($"num1 << 2 = {result,5} bin:{Convert.ToString(result, 2)}");
//Shift연산 (오른쪽 2칸)
result = num1 >> 2;
Console.WriteLine($"num1 >> 2 = {result,5} bin:{Convert.ToString(result, 2)}");
}
}
}
|
실행결과
NOT연산을 제외하고는 예상한대로 표출이 되었고 NOT연산자의 경우 음수가 표기되었는데 이부분은 최상위 비트값이 1이기때문에 음수값으로 표출이 되었습니다.
'프로그래밍 > C#' 카테고리의 다른 글
[C#] Stringbuilder vs String 사용속도측정(Stopwatch 사용) (0) | 2022.04.18 |
---|---|
[C#] 문자열 포멧처리방법 (+, string.Format,$문자열보간) (1) | 2022.03.23 |
[C#] 2진수,8진수,10진수,16진수로 출력하기 (0) | 2022.02.20 |
[C#] FTP 이미지파일 업로드/다운로드 (0) | 2021.12.24 |
[C#] 바이너리데이터 파일읽기/쓰기 (BinaryReader/Writer) (0) | 2021.11.18 |