연산자
연산자Operator), 피연산자(Operand)
피연산자와 함께 사용되어서 계산 결과를 만들어 내는 기호를 뜻한다
예시 ) 17 + 11 이면 17과 11을 피연산자라 하고 + 를 연산자라고 한다.
Symbol 1Type of operationAssociativity
| [ ] ( ) . -> ++ -- (postfix) |
Expression | Left to right |
| sizeof & * + - ~ ! ++ -- (prefix) |
Unary | Right to left |
| typecasts | Unary | Right to left |
| * / % | Multiplicative | Left to right |
| + - | Additive | Left to right |
| << >> | Bitwise shift | Left to right |
| < > <= >= | Relational | Left to right |
| == != | Equality | Left to right |
| & | Bitwise-AND | Left to right |
| ^ | Bitwise-exclusive-OR | Left to right |
| | | Bitwise-inclusive-OR | Left to right |
| && | Logical-AND | Left to right |
| || | Logical-OR | Left to right |
| ? : | Conditional-expression | Right to left |
| = *= /= %= += -= <<= >>= &= ^= |= |
Simple and compound assignment 2 | Right to left |
| , | Sequential evaluation | Left to right |
출처 : https://learn.microsoft.com/en-us/cpp/c-language/precedence-and-order-of-evaluation?view=msvc-170
Precedence and order of evaluation
Learn more about: Precedence and order of evaluation
learn.microsoft.com
정수 피연산자와 실수 피연산자
같은 자료형 끼리의 나눗셈은 그 결과도 같은 자료형이다. C 언어에서는 float 자료형의 나머지 연산은 불가능 하다.
복합 대입 연산자
예시 ) Num *= 11 로 =대입 앞에 + - * / % 등이 있으며 해당 기호들은 선 처리후 대입한다.
값(Value), 식(Expression), 문(Statement)
값 은 리터럴과 같다
예시) 13579 , 1.1456, "Hello, World!" 등
식 은 피연산자와 연산자로 이루어져서 값으로 귀결 되는 것들이라 한다.
예시 ) 13+579, 1.1456 - 0.87 등등
문 은 컴퓨터가 수행할 명령어를 뜻한다
증감 연산자
증가/감소의 줄임말로 단항의 피연산자를 가지는게 특징이다.
예시 ) ++i 는 전치 증감 연산자로 지금 당장 i 를 1을 증가한다
i++ 는 후치 증감 연산자로 다음 줄에 i 를 1을 증가한다
논리 연산자
앞서 C언어는 거짓, 거짓에 준하는 값 0 , NULL, \0 등이 있고 그 외에 나머지는 참이라 한다.
논리 곱 연산자(&&), 논리 합 연산자(||), 논리 반전 연산자(!)
결국 합이고 곱이기에
예시 ) -1 && 0; 이면 -1은 참이라 1이고 0은 거짓이라 0이기에 곱하면 0이되어 거짓이된다
-3 || 0; 은 -3은 참이고 0은 거짓이기에 1과 0이지만 합을 하기에 1이 되므로 참
곱은 둘다 참이여야만 참, 합은 둘중 하나라도 참이면 참이 나온다.
관계 연산자
피연산자 간의 관계를 판단하는 연산자로 < , != , == 등이 있다. 수학과 다르게 대등 연산자는 == 을 사용한다. =은 대입이다.
형변환 연산자 (Type-cast Operator)
자료형 A 에서 자료형 B로 변환 시켜주는 연산자로 명시적 형변환 이라고도 부른다.
예시 ) 3.14 를 (int) 3.14로 하여 정수 3으로 변환하거나 숫자 1을 (boolean)1로 하여 참(True)으로 변환시키거나 할때 사용한다.
- 추가로 찾아보니 실수에서 정수로 변환하게되면 소수점 절삭과 반올림의 부재로 인한 데이터의 유실과 표현 범위의 차이 및 값의 왜곡으로 문제가 생기며 부동 소수점 오차가 발생 그리고 성능(불필요한 연산) 및 가독성 저하가 된다고 합니다
삼항 연산자
피연산자로 세 개의 항을 갖는 연산자
예시 )
// Main.c
#include <stdio.h>
int main(void)
{
int Num1 = 4;
int Num2 = 5;
printf("큰값 = %d", Num1 < Num2 ? Num2 : Num1);
return 0;
}

sizeof
단항 피연산자를 가지며, 피연산자의 자료형 크기를 바이트 단위로 반환한다.
ex)
// Main.c
#include <stdio.h>
int main(void)
{
float Num = 0.1;
printf("%d\n", sizeof(Num));
return 0;
}

비트 연산자
비트(Bit-wise)라는 말이 붙으면 피연산자를 모두 2진수로 평가한 후에 연산을 수행해야한다.
비트 논리 연산자 (Bit-wise Logical Operator)
비트별로 논리 연산을 수행하는 연산자로 알려주신 바로는 비트 논리보다 곱/합/반전/베타합 글자에 집중하라고 한다.
비트 논리 연산자의 종류
비트 논리 곱 연산자(&)
비트 논리 합 연산자(|)
비트 논리 반전 연산자 (~):전체 비트를 반전한다.
비트 논리 베타합 연산자(^):비트별로 1의 개수가 홀수개면 그 결과는 1, 짝수개면 0.
비트 이동 연산자 (Bit-Shift Operator)
피연산자를 2진수로 모두 평가 한후에 2진수 기준 왼쪽 혹은 오른쪽으로 n칸씩 이동시키는 연산자이다
<< n 은 왼쪽으로 n번 이동시키며 빈 자리는 0으로 채운다
>> n 은 오른쪽으로 이동시키며 부호 비트에 맞춰 빈 자리를 채운다.
예시 ) 0000 1100 << 2 면 0011 0000 이므로 48이 된다.
0000 1100 >> 4 면 0000 이므로 0이다.
1100 0000 >> 4 일경우 부호가 음수여서 1111 1100 (-4)이 된다.
1100 0000 << 2 일경우 2의 보수와 비트 수의 크기에 따라 답이 달라진다고 합니다.
8비트만 쓸경우: 0 , 일반적인 컴퓨터 (32/64): -256
15 & 7의 결과값은 무엇일까요?
- (힌트: 15는 1111, 7은 0111)
위 같은경우 곱이기에 1111 * 0111 = 0111 이므로 7
8 | 4의 결과값은 무엇일까요?
- (힌트: 8은 1000, 4는 0100)
합 이기에 1000 + 0100 = 1100 이므로 12
10 ^ 10의 결과값은 무엇일까요?
- (힌트: 같은 숫자를 XOR 하면 어떤 결과가 나올까요?)
1010 ^ 1010 둘다 같은 수이므로 0000되어 0이다.
예시 ) 10^5 일 경우 1010 ^ 0101 이므로 1111 되니 15이다
부호 있는 8비트 정수 체계에서 ~0의 결과값은 무엇일까요? (10진수로 답하세요)
- (힌트: 모든 비트가 반전됩니다.)
0000 0000 을 반전하므로 1111 1111 이이고 1을빼고 반전시키면 0000 0001 이 되므로 -1을 의미한다고 한다.
~x =-(x+1)
20 >> 2의 결과값은 무엇일까요?
- (힌트: 오른쪽으로 한 칸 밀 때마다 값은 1/2이 됩니다.)
10100을 왼쪽에서 오른쪽으로 땡겨온다 생각하면 00101이므로 5
AI 계산식 : 20/2^2 = 20/4 = 5