비트연산자
연산자 | 이름 | 설명 | 지원형식 |
---|---|---|---|
« | 왼쪽 시프트 | 첫 번째 피연산자의 비트를 두 번째 피연산자의 수만큼 왼쪽 으로 이동 |
첫 번째 연산자는 int, uint, long, ulong 두 번째 연산자는 int 형식만 지원 |
» | 오른쪽 시프트 | 첫 번째 피연산자의 비트를 두 번째 피연산자의 수만큼 오른쪽 으로 이동 |
첫 번째 연산자는 int, uint, long, ulong 두 번째 연산자는 int 형식만 지원 |
& | 논리곱(AND) | 두 피연산자의 비트 논리합 | 정수 개열 형식과 bool 형식에 대해 사용 |
⎮ | 논리합(OR) | 두 피연산자의 비트 논리합 | 정수 개열 형식과 bool 형식에 대해 사용 |
배타적 논리합(XOR) | 두 피연산자의 비트 배타적 논리합 | 정수 개열 형식과 bool 형식에 대해 사용 | |
~ | 보수(NOT) | 피연산자의 비트를 0은 1로 1은 0으로 반전(단항연산자) |
int, uint, long, ulong 에 대해 사용 |
시프트 연산자 (Shift Operator)
«
240을 16개 비트로 표현
왼쪽으로 2비트 이동
»
오른쪽으로 2비트 이동
음수에 대한 시프트 이동
-255 를 오른쪽 2비트 시프트 이동
비어있는 비트는 1로 채움
int a = 240; 원본 데이터 / 00000000 00000000 00001111 00000000
int b = 2; 옮길 비트의 수
int result_1 = a << b; / 00000000 00000000 00111100 00000000 /960
int result_2 = a >> b; / 00000000 00000000 00000011 11000000 /60
원본 데이터를 a, 옮길 비트수를 b
라고 했을 때, <<
연산을 하면 a * 2b
, >>
를 하면 a/2b
의 결과가 나옴
public static class ShiftOperator
{
public static void Shift()
{
WriteLine("Testing <<...");
int a = 1;
WriteLine("a : {0:D3} (0x{0:X8})", a);
WriteLine("a << 1 : {0:D3} (0x{0:X8})", a << 1);
WriteLine("a << 2 : {0:D3} (0x{0:X8})", a << 2);
WriteLine("a << 5 : {0:D3} (0x{0:X8})", a << 5);
WriteLine("\nTesting >> ...");
int b = 255;
WriteLine("b : {0:D3} (0x{0:X8})", b);
WriteLine("b >> 1 : {0:D3} (0x{0:X8})", b >> 1);
WriteLine("b >> 2 : {0:D3} (0x{0:X8})", b >> 2);
WriteLine("b >> 5 : {0:D3} (0x{0:X8})", b >> 5);
WriteLine("\nTesting >> 2 ...");
int c = -255;
WriteLine("c : {0:D3} (0x{0:X8})", c);
WriteLine("c >> 1 : {0:D3} (0x{0:X8})", c >> 1);
WriteLine("c >> 2 : {0:D3} (0x{0:X8})", c >> 2);
WriteLine("c >> 5 : {0:D3} (0x{0:X8})", c >> 5);
}
}
비트 논리 연산자
논리곱 연산자 &
int result = 9 & 10; / result = 8;
논리합 연산자 |
int result = 9 | 10; / result = 11;
배타적 논리합 연산자 ^
int result = 9 ^ 10; / result = 3;
보수연산자 ~
int a = 255;
int result = ~ a; / result = -255;
public static void BitOperator()
{
int a = 9;
int b = 10;
WriteLine($"{a} & {b}: {a & b}");
WriteLine($"{a} | {b}: {a | b}");
WriteLine($"{a} ^ {b}: {a ^ b}");
int c = 255;
WriteLine("~{0}(0x{0:X8}) : {1}(0x{1:X8})", c, ~c);
}