본문 바로가기
C/[코드조선] C 핵심

[C] 연산자

by 묻공러 2024. 2. 2.

정수 피연산자와 실수 피연산자의 연산

같은 자료형의 피연산자들 간의 연산이 일반적이지만,

다른 자료형의 피연산자들간의 연산을 해야 하는 경우가 있을 수 있다

 

이들의 결과는 피연산자들의 자료형 중 한쪽 자료형만을 따르게 되기 때문에주의해서 사용해야 한다이런 경우가 발생하지 않기 위해서는 형변환을 해주는 것이 좋다

 

 

복합 대입 연산자

산술 연산과 대입 연산이 함께 계산되는 연산자를 의미한다

// *= (복합 대입 연산자)은 곱셈과 대입이 한 번에 이뤄진다

mul *= 3; // mul = mul * 3;

 

 

증감 연산자 (전치 / 후치)

전치는 지금 바로 연산이 이루어지고

후치는 해당 줄에서 가장 마지막으로 처리되기에 다음 줄에 연산이 된다고 생각하면 된다

int a = 1;
int b = 1;

int prefix = 1 + (++a);// 1 + 2
int prefix1 = a;// a는 2

int postfix = 1 + (b++);// 1 + 1
int postfix1 = b;// b는 2

// 전치 후치 둘다 다음 줄에서는 a와 b 둘다 2
// 다만,
// 전치는 증감연산이 바로 적용이 되었고
// 후치는 증감연산이 다음 줄에서 적용이 되었다

 

 

대등 연산자

대등 연산자를 작성할 때는 좌측 피연산자에 상수를 적는 것이 오류를 막을 수 있는 좋은 습관이다

if(num == 3)// 일반적인 방법

if(num = 3)// 실수를 했을 경우, 오류를 발견하기 힘듬

if(3 == num)// 추천하는 방법

if(3 = num)// 잘못된 문법이기에 바로 오류가 발견된다

 

 

논리 연산자

C언어에서는 0은 거짓(false)이고 0 이외의 모든 값은 참(true)

논리 연산자의 핵심은

곱 또는 합 단어이며, 굳이 진리표(truth table)를 외울 필요가 없다

&& 는 곱연산, || 는 합연산이라 불린다

 

ex)

6과 10의 곱연산, 합연산의 예시는 아래와 같다

합연산의 경우 0이 아닌 경우는 1로 된다

 

 

삼항 연산자(Ternary Operator)

피연산자로 세 개의 항을 갖는 연산자를 의미한다

조건문 if-else의 대용으로 사용이 가능하다

int x = 10;
int y = 20;

// x와 y 중에서 더 큰 값을 선택하여 max에 할당
int max = (x > y) ? x : y;

// (x > y) 식이
// 참이라면 :(colon)을 기준으로 앞에 값(또는 식)이 계산 결과
// 거짓이라면 colon 뒤에 값(또는 식)이 계산 결과
// 거짓이기에, max에는 y값이 들어감

 

 

10진수에서 2진수로 변환하는 법

몫이 0이 될 때까지 2로 계속 나누고 아래와 같이 읽으면 된다

 

 

헷갈리는 비트 논리 연산자(Bit-wise Logical Operator)

비트 논리 반전 연산자(~):

전체 비트를 반전 비트

 

논리 베타합 연산자(^):

비트별로 1의 개수가 홀수개면 그 결과는 1, 짝수개면 0

(기본 논리: 서로 달라야 참)

 

 

 

비트 이동 연산자(Bit-Shift Operator)

비트를 왼쪽 / 오른쪽으로 n번 이동하는 것은 2를 n번 곱 / 나눈 것과 같다

int leftShift = 8;// 이진수로 1000

int result = num << 2;// 좌측으로 2비트 이동
// 8 * 2 * 2

int rightShift = 16;  // 이진수로 10000

int result = num >> 3;// 우측으로 3비트 이동
// 16 / 2 / 2 /2

 

 

sizeof 주의점

int n;
char ch;

int size  = sizeof(n + ch);// 가장 큰 자료형 크기인 4를 출력한다