윈도우즈프로그래밍#4
LeeMir, 18 March 2021
언어 구조(이어서)
연산자
- 식
- 문장에서 값을 계산하는데 사용
- 식은 연산자(operator)와 피연산자(operand)로 구성
- 식의 값에 따라
- 산술식, 관계식, 논리식으로 구분
- 연산자
- 식의 의미를 결정
- 피연산자가 어떻게 계산될지를 나타내는 기호
- C#언어 스펙으로 48개의 연산자가 정의되어 있음
- 산술 연산자
- 수치 연산을 나타내는 연산자
- 연산자 종류
- 단항 산술 연산자: +, -
- 이항 산술 연산자: +, -, *, /, %
- % : 나머지 연산자
- x % y = x - (x/y) *y
- +와 -, *는 계산 속도가 빠르나 /와 %는 계산 속도가 비교적 느린 편
- 관계 연산자
- 두개의 값을 비교하는 이항 연산자
- 연산 결과 : true or false
- 관계 연산자가 포함된 식 : 관계식
- for, while, do-while의 조건식
- 연산자 우선순위
- 관계 연산자는 산술 연산자보다 우선순위가 낮음
- 비교 연산자(> >= < <=) > 항등 연산자(== !=)
- 논리 연산자
- 두 피연산자의 논리 관계를 나타내는 연산자
- 연산자 종류
-
논리곱(&&), 논리합( ), 논리부정(!)
-
- 연산자 우선순위
- 논리 연산자는 산술 연산자나 관계연산자보다 우선순위가 낮음
- 논리부정 > 논리곱 > 논리합
- 증가 및 감소 연산자
- 정수형 변수의 값을 하나 증가시키거나 감소시키는 연산자
- 연산자 기호
- ++, –
- 변수가 아닌 식에는 사용 못함: (a+b)++
- 실수형 적용 안됨 : f++
- 연산자 종류
- 전위 연산자(prefix oprator)
x = ++n
- 후위 연산자(postfix operator)
x = n++
- 전위 연산자(prefix oprator)
- 비트 연산자
- 비트 단위로 연산을 수행하는 연산자
- 피연산자는 반드시 정수형
- 연산자 종류
-
비트 논리곱(&), 비트 논리합( ), 비트 배타적 논리합(^), 왼쪽 이동(«), 오른쪽 이동(»), 1의 보수(~)
-
- 연산자 우선순위
- 1의 보수 > 비트 이동 > 논리곱 > 배타적논리합 > 논리합
0xFFFFFFFF
보다~0
을 사용하면 32비트 64비트에서 모두 돌아가게 할 수 있음0xFFFFFFF0
은~0xF
로 쓰면 됨
- 조건 연산자
- 의미가 if문장과 같은 삼항 연산자
- 형태
- 식1 ? 식2 : 식3
max = x > y ? x : y;
- 식1 ? 식2 : 식3
- 복합 배정 연산자
- 이항 연산자와 배정 연산자가 결합하여 이루어진 연산자
- 예시
sum += i;
- 캐스트(형변환) 연산자
- 자료형 변환 연산자
- 형태
- (자료형) 식
- 예시
(float) (1/2) = 0
(float) 1/2 = 0.5
- 특징
- 자료형의 크기가 큰쪽으로는 묵시적 형변환을 해줘야하나 자료형의 크기가 작은 쪽으로는 형변환 연산자를 사용해야함
- 형 검사 연산자
- 연산자 종류
- 데이터 타입이 지정한 타입과 호환 가능한지 검사 : is
obj is <type>
- 주어진 값을 지정한 타입으로 변환 : as
obj as <type>
- 데이터 타입이 지정한 타입과 호환 가능한지 검사 : is
- 연산자 종류
- 지정어 연산자
- 연산의 의미를 C# 지정어로 나타낸 연산자
- 연선자 종류
- 객체 생성 연산자 :
new
- 객체 형 반환 연산자 :
typeof
- 오버플로 검사 연산 :
checked
- 오버플로 무시 연산 :
unchecked
- 객체 생성 연산자 :
형 변환
- 묵시적 형 변환
- 컴파일러에 의해 자동적으로 수행되는 형 변환
- 작은 크기 자료형 => 큰 크기 자료형
- 명시적 형 변환
- 프로그래머가 캐스트 연산자를 사용하여 수행하는 형 변환
- 형태
- (자료형) 식
- 큰 크기 자료형에서 작은 크기 자료형으로 변환 시 정밀도 상실
- int와 float 사이 변환의 경우 둘 다 4바이트의 크기를 갖지만, float는 값을 나타내는 부분이 3바이트이기 때문에 int에서 float로 변환하면 정밀도가 떨어진다
- 형 변환 금지
- bool
- 같은 자료형 이외에 다른 자료형으로의 변환 금지(묵시적, 명시적 모두 안됨
- bool
박싱과 언박싱
- 박싱
- 값형의 데이터를 참조형으로 변환하는 것
- 컴파일러에 의해 묵시적으로 행해짐
- 언박싱
- 참조형의 데이터를 값형으로 변환하는 것
- 반드시 캐스팅을 통하여 명시적으로 행해짐
- 반드시 박싱될 때의 형으로 언박싱을 해주어야 함
널이 가능한 형(Nullable Property)
- 초기값
- 값형 : 0으로 설정
- 참조형 : 참조할 객체가 없을 때 null로 설정
- 널이 가능한 형
- 값형에서도 참조형과 같이 값이 없는 것을 나타낼 필요가 있음
- 값형에서 참조형과 같이 값이 없는 경우를 나타낼 때 사용하는 자료형
<type>?
- HasValue, Value 프로퍼티