비트연산자 6가지 종류 (C,C++언어와 같다.)
연산자 | 의미 |
---|---|
~ | Bitwise Complement |
& | Bitwise AND |
| | Bitwise OR |
^ | Bitwise Exclusive OR(XOR) |
<< | Bitwise Left shift |
>> | Bitwise Right shift |
정수형 변수(int, long, 등)와 bool형 변수에 대해 비트 수준에서 연산한다.
- 예를 들어, 정수 14는 2진수로 표현한다면 1110, 정수 11은 2진수로 표현한다면 1011이다.
- 즉, 정수는 32비트이지만, 8비트만을 표현하면 정수 14는 0000 1110, 정수 11은 0000 1011이다.
6가지 비트 연산 표에 대한 설명
비트 연산명 | 설명 |
---|---|
비트 AND(&) | 14 : 0000 1110 11 : 0000 1011 ----------------- & : 0000 1010 |
비트 OR(|) | 14 : 0000 1110 11 : 0000 1011 ----------------- | : 0000 1111 |
비트 XOR(^) | 14 : 0000 1110 11 : 0000 1011 ----------------- ^ : 0000 0101 |
비트 NOT(~) | 14 : 0000 1110 ----------------- ~ : 1111 0001 |
왼쪽 두 비트 시프트 | 14 : 0000 1110 ----------------- <<2 : 0011 1000 |
오른쪽 한 비트 시프트 | 11 : 0000 1011 ----------------- >>1 : 0000 0101 |
비트 AND, 비트 OR, 비트 XOR 는 피연산자가 2개인 이항연산자이다.
- 각 비트별로 AND,OR,XOR 연산을 수행한다.
- 각 비트별로 AND,OR,XOR 연산을 수행한다.
비트 NOT 연산은 피연산자가 하나이며, 각 비트의 0과 1를 바꾸어 준다.
- 위 표에서 0000 1110을 비트 NOT한 결과는 1111 0001인데, 맨 앞자리가 1이므로 음수로 해석되고, 음수는 2의 보수로 계산되므로 -15로 해석된다.
- 위 표에서 0000 1110을 비트 NOT한 결과는 1111 0001인데, 맨 앞자리가 1이므로 음수로 해석되고, 음수는 2의 보수로 계산되므로 -15로 해석된다.
왼쪽 시프트와 오른쪽 시프트 연산은 오른쪽에 몇 비트를 시프트 하는지 숫자로 표시한다.
- 왼쪽 시프트는 한 비트를 시프트할 때마다 2를 곱하는 효과가 있다.
- 오른쪽 시프트는 한 비트를 시프트할 때마다 2로 나누는 효과가 있다.
예제 코드
using System;
using static System.Console;//Console단어를 생략(코드길이줄어둠)
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// x = 14, y = 11,result를 정수형 변수로 선언한다.
int x = 14, y = 11, result;
// x와 y의 비트 OR 연산을 하고 결과를 result에 할당한 후 출력한다.
result = x | y;
WriteLine("{0} | {1} = {2}", x, y, result);
// x와 y의 비트 AND 연산을 하고 결과를 result에 할당한 후 출력한다.
result = x & y;
WriteLine("{0} & {1} = {2}", x, y, result);
// x와 y의 비트 배타적 OR 연산을 하고 결과를 result에 할당한 후 출력한다.
result = x ^ y;
WriteLine("{0} ^ {1} = {2}", x, y, result);
// x의 보수를 계산하여 결과를 result에 할당한 후 출력한다.
result = ~x;
WriteLine("~{0} = {1}", x, result); // 0은 1로, 1은 0으로 바꾸어주는 1의 보수이다.
//x를 왼쪽으로 2비트 시프트하고 결과를 출력한다. x에 4를 곱하는 결과이다.
result = x << 2;
WriteLine("{0} << 2 = {1}", x, result);
// y를 오른쪽으로 1비트 시프트하고 결과를 출력한다. y에 2를 나누는 결과이다.
result = y >> 1;
WriteLine("{0} >> 1 = {1}", y, result);
}
}
}
결과
14 | 11 = 15
14 & 11 = 10
14 ^ 11 = 5
~14 = -15
14 << 2 = 56
11 >> 1 = 5
'C# > 문법 정리' 카테고리의 다른 글
C# - 대입 연산자(assignment operator) (0) | 2024.07.04 |
---|---|
C# - 조건 연산자(conditional operator) (0) | 2024.07.03 |
C# - 논리 연산자 (Logical Operators) (0) | 2024.06.25 |
C# - 관계연산자 (Relational Operators) (0) | 2024.06.25 |
C# - 오버플로우 예외처리 (Overflow Exception) (0) | 2024.06.24 |