728x90
1.비트연산자를 사용하는 이유
- 메모리와 성능 효율성: 비트 연산자는 데이터를 비트 단위로 조작하므로 메모리 사용을 최소화할 수 있습니다. 특히, 대량의 데이터를 다룰 때 이점을 가집니다. 비트 단위 연산은 메모리를 적게 사용하며, 빠르게 연산을 수행하여 성능을 향상시킬 수 있습니다.
- 하드웨어 제어와 최적화: 하드웨어를 제어하거나 특정 장치와의 통신에서 비트 연산자는 매우 유용합니다. 예를 들어, 특정 장치의 레지스터 값을 설정하거나 클리어하는 데에 사용됩니다.
- 암호화 및 보안: 암호화 알고리즘에서는 비트 연산자를 사용하여 데이터를 암호화하거나 해독하는 데 활용됩니다. 비트 연산은 암호화 기술에서 중요한 역할을 합니다.
- 비트 단위 조작: 데이터에서 특정 비트를 검사, 설정, 수정하는 등의 작업에서 비트 연산자는 매우 유용합니다. 이는 특정 상태를 저장하거나 데이터의 특정 부분을 조작하는 데 사용됩니다.
비트 연산자는 주로 하드웨어 제어, 암호화, 데이터 조작, 성능 최적화 등 다양한 분야에서 사용됩니다. 이러한 연산자들은 비트 단위에서 데이터를 조작하고 제어함으로써 프로그램의 효율성을 향상시킬 수 있습니다.
2.비트연산자 계산방법
비트연산자는 AND, OR, XOR, NOT, SHIFT등이 있습니다. 사용방법은 아래 코드의 주석을 확인하시면 됩니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
//비트 연산자는 10진수가 아닌 이진수로 계산 -> 논리회로의 개념을 알아야 함
//int 는 32비트로 표현됨
int a = 1; // 00000000 00000000 00000000 00000001
int b = 5; // 00000000 00000000 00000000 00000101
int c = 0;
//& 연산-> AND -> 두 비트 모두 1일 경우에 1을 반환
// a = 00000000 00000000 00000000 00000001
// b = 00000000 00000000 00000000 00000101
// c = 00000000 00000000 00000000 00000001 -> 1
c = a & b;
Console.WriteLine(c); // 결과 1
//| 연산-> OR -> 두 비트 중 하나만 1이여도 1을 반환
// a = 00000000 00000000 00000000 00000001
// b = 00000000 00000000 00000000 00000101
// c = 00000000 00000000 00000000 00000101 -> 5
c = a | b;
Console.WriteLine(c);// 결과 5
//^연산 -> XOR ->두개의 비트가 서로 다른 경우 1을 반환
// a = 00000000 00000000 00000000 00000001
// b = 00000000 00000000 00000000 00000101
// c = 00000000 00000000 00000000 00000100 -> 4
c = a ^ b;
Console.WriteLine(c); //결과 4
//~ -> NOT -> 비트에서 1이면 0으로, 0이면 1로 반환 -> 계산방법은 이진수로 변환 후 +1을 한 후 다시 십진수로 변환하고 -부호를 붙인다.
// a = 00000000 00000000 00000000 00000001
// ~a = 11111111 11111111 11111111 11111110 -> 1의 보수 00000000 00000000 00000000 00000001 ->2의 보수: +1 -> 00000000 00000000 00000000 00000010 -> -2
// b = 00000000 00000000 00000000 00000101
// ~b = 11111111 11111111 11111111 11111010 -> 1의 보수 00000000 00000000 00000000 00000101 ->2의 보수: +1 -> 00000000 00000000 00000000 00000110 -> -6
Console.WriteLine(~a);
Console.WriteLine(~b);
//shift 연산자 ->비트를 이동시키는 연산자
// << 좌측으로 이동 , >> 우측으로 이동 -> 계산방법은 shift 연산자 다음 값이 n일 때 좌측이동은 2의 n제곱만큼 곱하기, 우측이동은 2의 n제곱만큼 나눈 몫
c = a << 1;
// a = 00000000 00000000 00000000 00000001
// c = 00000000 00000000 00000000 00000010 -> 2 -> 1*2
Console.WriteLine(c);
c = a << b;
// a = 00000000 00000000 00000000 00000001
// c = 00000000 00000000 00000000 00010000 -> 1*2^5 = 32
Console.WriteLine(c);
c = b >> 1;
// b = 00000000 00000000 00000000 00000101
// c = 00000000 00000000 00000000 00000010 -> 2 ->5 /2
Console.WriteLine(c);
c = a >> b;
//a보다 b가 더 크므로 나눈 몫은 0 -> c=0
Console.WriteLine(c);
}
}
}
'C# Programming > C#' 카테고리의 다른 글
[C#] 데이터 베이스 연결 및 기본 CRUD (1) | 2024.05.14 |
---|---|
[C#] 객체지향 프로그래밍 (0) | 2024.05.14 |
[C#] 배열과 foreach문(반복) (0) | 2024.05.14 |
C# 설치 및 환경설정 (1) | 2024.05.13 |
C#이란? (0) | 2024.05.13 |