데이터를 가공하는 연산자
널 조건부 연산자 - ?.
?. 가 하는 일은 객체의 멤버에 접근하기 전에 해당 객체가 null인지를 검사하여 그 결과가 참(즉, 객체가 null)이면 그 결과로 null을 반환하고, 그렇지 않으면 '.' 뒤에 지정된 멤버를 반환
ArrayList a = null;
a?.Add("야구"); // a?.이 null을 반환하므로 Add() 메소드는 호출되지 않음
a?.Add("축구");
Console.WriteLine($"Count : {a?.Count}"); // 아무 결과도 안나옴(null 상태)
a = new ArrayList(); // a는 더 이상 null이 아님
a?.Add("야구");
a?.Add("축구");
Console.WriteLine($"Count : {a?.Count}"); // Count = 2
Console.WriteLine($"{a?[0]}");
비트 연산자
연산자 | 이름 | 설명 | 지원 형식 |
<< | 왼쪽 시프트 연산자 | 첫 번째 피연산자의 비트를 두 번째 피연산자의 수만큼 왼쪽으로 이동시킴 | 첫 번째 피연산자 int, uint, long, ulong 두 번째 피연산자 int 형식만 지원 |
>> | 오른쪽 " | <<와 반대 | <<와 같음 |
& | 논리곲(AND) 연산자 | 두 피연산자의 비트 논리곱 수행 | 정수 계열 형식, bool 형식 |
| | 논리합(OR) 연산자 | 두 피연산자의 비트 논리합 수행 | &와 같음 |
^ | 배타적 논리합(XOR) 연산자 | 두 피연산자의 비트 배타적 논리합 수행 (서로 다르면 1) |
&와 같음 |
~ | 보수(NOT) 연산자 | 피연산자의 비트를 0은 1, 1은 0으로 반전시킴. (보수 연산) 단항 연산자 |
int, uint, long, ulong |
시프트 연산자
시프트 연산자(Shift Operator)는 비트를 왼쪽이나 오른쪽으로 이동시키는 기능
단, 음수에 대한 오른쪽 시프트 연산은 약간 다른데
비트를 이동시킨다는 것은 같지만, 이동시킨 후 만들어진 빈 자리에 0이 아닌 1을 채워 넣는다.
사용하는 이유
1) 시프트 연산은 고속의 곱셈과 나눗셈을 구현하기 쉬움
2) & , | 연산자와 함께 byte처럼 작은 단위로 쪼개진 데이터를 다시 하나의 int나 long 형식으로 재조립하는데 사용
int a = 1;
Console.WriteLine("a : {0:D5} (0x{0:X8})", a);
Console.WriteLine("a << 1 : {0:D5} (0x{0:X8})", a<<1);
Console.WriteLine("a << 5 : {0:D5} (0x{0:X8})", a<<5);
int b = 255;
Console.WriteLine("b >> 1 : {0:D5} (0x{0:X8})", b >> 1);
int c = -255;
Console.WriteLine("b : {0:D5} (0x{0:X8})", c);
비트 논리 연산자
비트 논리 연산자는 bool 형식 외에도 정수 계열 형식의 피연산자에 대해서도 사용 가능
How?
우리가 사용하는 데이터는 0&1로 이뤄지는 비트 덩어리다.
int 형식 데이터는 4바이트(32비트)로 이뤄지고, long 형식 데이터는 8바이트(64비트)로 이뤄진다.
비트 논리 연산은 이 비트 덩어리를 이루고 있는 각 비트에 대해 1은 참, 0은 거짓으로 해서 논리 연산을 수행.
int a = 9;
int b = 10;
Console.WriteLine($"{a} & {b} : {a & b}");
// 9 & 10 : 8
int c = 255;
Console.WriteLine("~{0}(0x{0:X8}) : {1}(0x{1:X8})", c, ~c);
// ~255(0x000000FF) : -256(0xFFFFFF00)
'ETC > C#' 카테고리의 다른 글
메소드 / 가변길이 매개 변수 / 로컬 함수 (0) | 2021.01.20 |
---|---|
매개 변수 / 참조 지역 변수 (0) | 2021.01.18 |
C# 문자열 다루기 (0) | 2021.01.10 |
C# 데이터 보관하기 (3) (0) | 2021.01.10 |
C# 데이터 보관하기 (2) (0) | 2021.01.09 |
댓글