수식과 연산자
수식(expression)은 피연산자(operand)와 연산자(operator)의 조합
피연사자의 수에 따라 단항, 이항, 삼항 연산자로 나뉘어 진다.
Example :
x = 5 + 8; 여기서 5와 8은 피연산자(operand)이고 +는 연산자(operator).
X = ++y;
message = (age >= 18) ? "성인" : "미성년자";
산술 연산자
산술 연산자 - 실수
나머지 연산자
부호 연산자 & 증감 연산자 - 중요
복합 대입 연산자
변수 o 를 자세히 보자. (hint o = +1;)
관계 연산자
C언어에서 참(True)은 1, 거짓(False)는 0으로 표시한다.
==은 하나의 연산자이므로 붙여써야 한다. = = 은 error.
관계 연산자 - 실수
논리 연산자
논리 연산의 결과는 참(True)은 1, 거짓(False)는 0이다.
C 언어에서 0이 아니면 참으로 간주한다.
!100 또는 !-3
-3과 100은 참으로 간주한다. 그래서 결과는 0이다.
단축 계산
( 2 > 3) && ( ++x < 5 ) 에서 (++x < 5)는 실행되지 않고 거짓이다. 따라서 ++x도 실행되지 않는다.
( 3 > 2) || ( x++ < 5) 이것도 ( x++ < 5) 실행없이 참이다. 따라서 x++도 실행되지 않는다.
조건 연산자 (삼항연산자)
예시 : 참ㅇ이면 x 거짓이면 -x
x = (x > 0) ? x : -x;
콤마 연산자
x = (2+3, 5-3);
int X =1, y = 2;
printf("Thank"), printf("you!\n");
비트 연산자
비트 연산 - &, |
int x = 9, y = 10, r = 0;
r = x & y;
x = 00000000 00000000 00000000 00001001
y = 00000000 00000000 00000000 00001010
r = 00000000 00000000 00000000 00001000
r = x | y;
x = 00000000 00000000 00000000 00001001
y = 00000000 00000000 00000000 00001010
r = 00000000 00000000 00000000 00001011
비트 연산 - ^, ~
int x = 9, y = 10, r = 0;
r = x ^ y;
x = 00000000 00000000 00000000 00001001
y = 00000000 00000000 00000000 00001010
r = 00000000 00000000 00000000 00000011
r = ~x;
x = 00000000 00000000 00000000 00001001
r = 11111111 11111111 11111111 11110110
비트 이동 연산자 (bits shift)
int x = 9, y = 10, r = 0;
r = x << 1; (x * 2 와 같다)
x = 00000000 00000000 00000000 00001001
r = 00000000 00000000 00000000 00010010
r = x >> 1; (x/2 와 같다, 오른쪽으로 움직일때는 부호 bit로 채워진다.)
x = 00000000 00000000 00000000 00001001
r = 00000000 00000000 00000000 00000100
16진수
비트 연산 - example 1
비트 연산 - example 2
비트 연산 - example 3
형변환 (type conversion)
자동적 형변환 (Demotion이 생기면 데이터 손실이 발생한다)
대입연산시
double f = 10; // 10.0이 저장된다. 올림변환(Promotion)
int i = 3.14; // 3이 저장된다. 내림변환(Demotion)
char x = 10000 // 내림변화 발생. Char형 변수( - 2^7 ~ 2^7-1 )는 한 byte이다.
정수연산시
Char x = 10, short y = 20; x +y 하면 이것을 int형으로 올림변환한다.
수식연산시
수식 연산시 피연산자들(operands)은 같은 자료형(Datatype)을 사용해야 한다.
하나의 수식에 다른 자료형이 사용되면 가장 높은 등급의 자료형으로 변환. 데이터 손실 방지
낮은 등급에서 높은 등급 (int, unsigned int, long, unsigned long, float, double)
10 + 1.2345 = 11.2345
명시적 형변환 (type cast)
int x = (int)3.14; // 3이 저장된다.
형변환 - example 1
형변환 - example 2
연산자 우선순위와 결합규칙
우선순위(Precedence)
우리가 수학에서 배웠던 것처럼 사용된다.
x+y*z
(x+y)*z
콤마 < 대입 < 논리 < 관계 < 산술 < 단항 < ()
결합규칙(Association)
x+y+z (left-to-right)
x=y=z (right-to-left)
연산자 우선순위 - 외우지 말고 이해하고 실제 사용시 참조