산술 연산자
- 연산자의 종류
더하고 빼고 곱하고 나누는 동작을 하는 것들이 연산자.
- 산술 연산자
산술 연산자는 더하고 곱하고 빼고 나누는 가장 기본적이고 가장 많이 사용되는 연산자.
워낙 일상에서 많이 쓰이는 것이므로 패스.
- 대입 연산자
대입이란 변수에 어떤 값을 집어넣는 동작이며 대입 연산자는 변수의 값을 변경할 때 사용.
수학 문제 풀듯이 a = 1 + b; 좌변 우변으로 나눠서 우변의 것을 좌변에 대입한다 라고 생각하면 됨.
- 증감 연산자
증감 연산자는 피연산자를 1씩 증가시키거나 감소시킴.
a = a + 1
a += 1
a++
이 세 가지는 같은 의미(1증가)를 지니고 있음.
증감연산자 중 ++a or a++이라는 연산자가 있는데 이것이 가장 주의해야할 연산자임.
전위형(prefix) : ++a, --a 같은 경우는 무조건 바로 + 1, -1을 시켜준다.
후위형(postfix) : a++, a-- 같은 경우는 문장이 끝나는 시점 (;)세미콜론을 기점으로 +1, -1이 된다.
논리 연산자
- 관계 연산자
관계 연산자는 피연산자를 두 개 취하는 이항 연산자이며 좌변과 우변을 비교하여 같은지, 다른지, 다르다면 어느 쪽이 더 큰지를 조사.
- 논리 연산자
논리 연산자는 주로 관계 연산자와 함께 사용되며 두 개 이상의 조건식을 결합하여 하나의 진리값을 만들어 냄.
- 비트 연산자
비트 연산자는 논리 연산자와 비슷하지만 비트를 연산 대상으로 한다는 점이 조금 다름.
- 쉬프트 연산자
쉬프트 연산자는 비트들을 지정한 수만큼 좌우로 이동시킴.
>> : 오른쪽으로 비트 옮김.
<< : 왼쪽으로 비트 옮김.
- 쉬프트 연산과 곱셈
비트를 이동시키는 쉬프트 연산은 곱셈과 나눗셈의 대용으로 사용할 수 있음.
<< 1 : 비트를 왼쪽으로 한칸씩 움직이면 2배의 수가 됨.
>> 1 : 비트를 오른쪽으로 한칸씩 움직이면 2로 나눈 수를 얻을 수 있음.
- 회전 연산
회전 연산은 쉬프트 연산과 유사한 비트 조작 명령임.
쉬프트는 비트를 선형으로 움직이지만 회전 연산은 원형으로 이동시킴.
_rotl, _rotr 함수로 제공.
비트맵 이미지를 회전시킬 수도 있고 특징으로 원래 값으로 복구가 가능하다는 점.
기타 연산자
- 삼항 조건 연산자
삼항 조건 연산자는 특이하게도 피연산자를 세 개나 가지는데 다른 언어에는 없은 C언어의 독특한 연산자임.
삼항 조건 연산자 형식
(조건식) ? TRUE : FALSE;
if 조건문과 똑같은 결과를 가져오지만 이 연산자 자체에 if 조건문이 들어가 있기 때문에 굳이 삼항 연산자를 이용할 필요는 없다고 생각.
- 쉼표 연산자
쉼표 연산자는 쉼표 기호(,)를 사용하는데 모양만으로 보면 구두점같이 생겨서 연산자가 아닌 것처럼 보이기도 함. 하지만 분명히 연산자임.
ex) for( i = 0, j =0; i < 9; i ++, j++){...}
- sizeof 연산자
sizeof 연산자는 피연산자로 주어진 타입 또는 변수의 크기를 계산한ㅁ.
sizeof 형식
sizeof(타입 또는 변수)
- 캐스트 연산자
캐스트 연산자는 수식 내에서 변수의 타입을 강제로 다른 타입으로 바꿔줌.
캐스트 형식
(타입) 변수
타입 (변수)
연산 규칙
- 연산 순위
- 결합 순위
결합 순서는 수식 내에 같은 종류의 연산자가 있을 때 어떤 방향의 연산을 먼저 수행할 것인가를 지정함.
- 산술 변환
C언어는 데이터 타입이 조금 다른 변수끼리도 자동으로 변환이 가능하면 연산을 허용.