리메이크 중/C,C++ 이론 중심

C(&C++) 이론 9. 기본 연산자

라이피 (Lypi) 2023. 1. 4. 17:57
반응형

목록용 썸네일 이미지


내용 참고

YES C (정보공학연구소/생능출판사)

혼자 연구하는 C/C++ (SoEn.kr /와우북스)


연산자(Operator)


Ⅰ. 연산자(operator)의 구분

C언어에서 연산자란 컴파일러가 하나 이상의 메모리에 저장된 값에 대해서 특정한 행동을 수행하도록 알려주는 기호를 의미한다.

 

ⅰ. 대략적인 분류

피연산자의 개수에 따른 분류 : 단항 연산자, 이항 연산자, 삼항 연산자.

기능에 따른 분류 : 산술, 관계, 부호, 증감, 비트 논리, 값 논리, 대입, 삼항 조건 등등

ⅱ. 연산자의 특징

■ 연산을 하기 위해서는 기본적으로 피연산자들의 자료형이 같아야 한다.

■ 만약 서로 다른 자료형끼리 연산을 하려 할 경우 컴파일러는 기본적으로 경고를 표시한다.

■ 경고를 표시하긴 하지만 C언어는 서로 다른 자료형끼리의 연산을 금지하고 있지는 않다.

■ 그러므로 컴파일러는 좀 더 표현 범위가 큰 자료형으로 자동형 변환을 시킨 후 연산을 한다.(ex. 정수 자료형 -> 실수 자료형)

■ 이때, 표현방식의 차이나 자료형의 크기 차이로 인한 오차가 생길 수도 있으니 주의해야 한다.

 


 

Ⅱ. 기본 연산자(operator) 설명

다음은 C언어의 교재들에서 기본적으로 설명하는 연산자들이다. 

생각보다 양이 많다. 자주 사용하는 것 위주로 천천히 공부하자.

 

ⅰ. 산술 연산자

■ 산술 연산자는 모두 피연산자의 수가 2개인 이항 연산자이다.

■ 산술 연산자는 모두 결합 순서가 왼쪽에서 오른쪽이다.

■ 피연산자들의 자료형이 같을 경우에는 결과도 그 자료형으로 반환된다.

■ 피연산자들의 자료형이 다른 경우에는 자동형 변환이 되므로 결과는 표현 범위가 더 큰 자료형으로 반환된다.

■ 단 나머지 연산자는 피연산자로 정수만을 받으므로 결과도 항상 정수로 반환된다.

■ 또한 나누기 연산자의 피연산자로 정수들을 사용하면 결과가 정수로 반환되며 나머지를 버린 몫만 반환된다.

■ 이때 정수 값끼리의 연산이지만 결과는 실수로 확인하고 싶다면 피연산자를 실수로 명시적 형 변환을 해야 한다.

■ 결괏값이 결괏값의 자료형의 범위를 벗어난 경우 오버플로우나 언더플로우가 일어날 수 있다.

■ 곱하기는 ×가 아닌 *로, 나누기는 ÷가 아닌 /로, 나머지 연산은 mod가 아닌 %로 표시한다.

 

산술 연산자 표

ⅱ. 관계 연산자

■ 관계 연산자는 모두 피연산자의 수가 2개인 이항 연산자이다.

■ 관계 연산자는 좌변의 값과 우변의 값의 관계를 참(1)과 거짓(0)으로 반환하는 연산자이다.

■ 참고로 C언어에서는 0 이외의 모든 수가 참을 나타낸다. (실수나 음수도 참을 나타냄)

■ 관계 연산자를 연속해서 사용할 경우 왼쪽부터 결합되긴 하지만 주로 논리 연산자와 함께 사용한다.

■ 일반적으로 알고 있는 수학적인 관계를 표현하려면 논리 연산자와 함께 사용해야 한다.

■ 비교하려는 데이터의 데이터 타입을 일치시킬 필요가 있다.

■ 비교하려는 데이터의 데이터 타입이 서로 일치하지 않을 경우 컴파일러는 경고를 한 후 자동형 변환해서 비교한다.

■ == 연산자와 = 연산자는 혼동해서 실수하기 쉽기 때문에 i == 8의 형식이 아닌 8 == i라는 형식으로 쓰는 걸 추천한다.

■ 그래야지 대입 연산인지 비교 연산인지 구분하기 쉽기 때문이다.

 

관계 연산자 표

ⅲ. 부호 연산자

■ 부호 연산자는 모두 피연산자의 수가 1개인 단항 연산자이다.

■ 부호 연산자는 오른쪽부터 결합되기 때문에 항상 피연산자의 왼쪽에 써줘야 한다.

■ +부호 연산자는 -부호 연산자와의 대칭성을 위해서 존재하지만 거의 생략된다.

■ -부호 연산자를 연속으로 쓴 -- 기호는 -1을 2번 곱하라는 뜻이 아니라 증감 연산자의 하나로 정의되어 있다.

■ 대신에 띄어쓰기나 괄호 등을 적용해서 한 변수에 여러 번 적용하는 것은 가능하다.

 

부호 연산자 표

 

ⅳ. 증감 연산자

■ 증감 연산자는 모두 피연산자의 수가 1개인 단항 연산자이다.

■ 증감 연산자를 피연산자의 좌측에 쓰는 것을 전위 증감 연산자라고 한다.

■ 증감 연산자를 피연산자의 우측에 쓰는 것을 후위 증감 연산자라고 한다.

■ 증감 연산자는 대입이 동시에 이루어지는 연산이므로 좌변 값(즉 변수)에만 사용할 수 있다.

■ 증감 연산자는 띄어쓰기나 괄호 등을 이용해도 한 변수에 여러 번 적용할 수 없다.

■ 전위 증감과 후위 증감에 따라 값이 달라질 수 있으므로 조심해서 구분해야 한다.

 

증감 연산자 표

 

 

반응형

ⅴ. 비트 논리 연산자

■ 비트 논리 연산자는 피연산자에 대한 비트(2진수) 단위 논리 연산을 수행하는 연산자를 의미한다.

■ 비트 논리 연산자의 피연산자로는 정수형 자료형만 올 수 있다.

■ 비트 논리 연산자의 결과는 2진수나 8진수, 16진수 등으로 표현하는 경우가 많다.

■ 각 논리 연산에 대한 설명은 사실상 이산수학의 영역이므로 생략한다.

■ 이를 이용하여 비트 단위로 데이터를 이용하는 방법들이 있다.

비트 논리 연산자 표

ⅵ. 값 논리 연산자

■ 값 논리 연산자는 피연산자의 진리값에 대한 논리 연산을 수행하는 연산자를 의미한다.

■ 값 논리 연산자는 주로 조건문에서 조건들을 연결할 때 사용한다.

■ && 연산자는 논리곱, || 연산자는 논리합이라고도 부른다.

■ 수학에서 자주 사용하는 10 > a > 5 같은 표현은 C언어에서는 (10 > a) && (a > 5)의 형태로 표현한다.

 

값 논리 연산자 표

ⅶ. 대입 연산자 (= 할당 연산자)

■ 일반 대입 연산자(= 연산자)를 제외한 다른 연산자들은 복합 대입 연산자라고 부른다.

■ 대입 연산자의 좌변에는 좌변 값(=변수)만 올 수 있다.

■ 우변에는 값을 리턴하는 수식이라면 제한이 없다.

■ 하지만 복합 대입 연산자는 합쳐진 다른 연산과 같은 제약 조건을 갖는다.

■ 대입 연산자의 리턴 값은 대입된 이후의 좌변 값과 같다. (a = b = c 가 가능한 이유이다.)

■ 복합 대입 연산자는 연산 순위가 낮은 편(16단계 중 15단계)이므로 간단한 수식에서만 사용하는 것을 추천한다.

 

대입 연산자 표

ⅷ. 삼항 조건 연산자

■ 피연산자를 3개 필요로 하는 유일한 연산자이기 때문에 간단하게 삼항 연산자라고도 불린다.

■ if-else문과 동일한 원리로 작동하며 간단한 if-else문은 삼항 연산자로 표현하는 게 더 깔끔하다.

■ 삼항 조건 연산자는 다른 변수에 값을 저장할 필요 없이 바로 수식 내에 쓸 수 있다는 장점이 있다.

■ 삼항 조건 연산자는 재정의 할 수 없다.

 

삼항 조건 연산자 표


반응형