% 나머지 연산자: 피연산자 정수형 데이터 일 때만 연산 가능한 나머지를 구해주는 이항 연산자입니다. 피연산자로 실수형 데이터를 사용하면 컴파일 에러가 발생합니다.
우선순위 3: 산술 연산자들 ii
+ 덧셈 연산자: 덧셈하는 이항 연산자입니다.
- 뺄셈 연산자: 뺄셈하는 이항 연산자입니다.
우선순위 4: Shift 연산자들
>> 오른쪽 시프트 연산자: 왼쪽에서 오른쪽으로 정해진 수만큼 비트가 전달되는 이항연산자입니다. 가장 왼쪽 비트는 부호가 있는 경우는 부호가 채워지며, 부호가 없는 경우는 0으로 채워지면서 가장 오른쪽 비트는 사라집니다. 일반적으로 비트를 확인하거나 빠른 나눗셈을 위해 사용합니다. m>>n 는 m / 2ⁿ와 같은 동작을 합니다.
<< 왼쪽 시프트 연산자: 오른쪽에서 왼쪽으로 정해진 수만큼 비트가 전달되는 이항연산자입니다. 가장 오른쪽 비트는 0으로 채워지고 가장 왼쪽 비트는 사라집니다. 일반적으로 비트를 세팅하거나 빠른 곱셈을 위해 사용합니다. m<<n 는 m * 2ⁿ와 같은 동작을 합니다..
우선순위 5: 비교 연산자들 i
< > <= >= 크기 비교 연산자: 데이터 값의 크기를 비교하는 이항 연산자들입니다.
우선순위 6: 비교 연산자들 ii
== !=크기 비교 연산자: 데이터 값의 같음을 비교하는 이항 연산자들입니다.
우선순위 7: 비트 연산자 i
& 비트 AND 이항 연산자: 비트 1과 비트 1이 만날 때만 1입니다. 1011 & 0101 이라고 가정할 때, 오른쪽 피 연산자의 비트가 1이면 왼쪽의 비트 값이 그대로 전달됩니다. 비트 AND에는 원하는 비트만을 남기는 bit mask기능이 있습니다.
1011
& 0101
0001
우선순위 8: 비트 연산자 ii
^ 비트 XOR 이항 연산자: 두 피 연산자의 비트가 서로 다를 때만 1이 됩니다. 비트XOR에는 두 데이터의 값이 같지 않으면 참이 되는 비교 기능이 있습니다.
1011
^ 0101
1110
우선순위 9: 비트 연산자 iii
| 비트 OR 이항 연산자: 두 피 연산자의 비트가 모두 0 일 때만 0입니다. 1011 | 0101 이라고 가정할 때, 오른쪽 피 연산자의 비트가 0이면 왼쪽 피 연산자의 비트 값이 그대로 전달됩니다. 비트 OR에는 원하는 비트를 세팅해 주는 bit set 기능이 있습니다.
1011
| 0101
1111
우선순위 10: 논리 연산자 i
&& 논리 AND 이항 연산자: 참 거짓을 판단하는 연산자입니다. 두 피 연산자가 모두 참일 때만 참입니다. 재미있는 사실은 첫 번째 피 연산자가 거짓이면 두 번째 피 연산자의 참 거짓은 판단하지 않는다는 것입니다. 첫 번째 피 연산자가 이미 거짓이니 두 번째 피 연산자가 참이든 거짓이든 거짓이 분명하기 때문입니다.
우선순위 11: 논리 연산자 ii
|| 논리 OR 이항 연산자: 참 거짓을 판단하는 연산자입니다. 두 피 연산자가 모두 거짓일 때만 거짓입니다. 역시 첫 번째 피 연산자가 참이면 두 번째 피 연산자의 참 거짓은 판단하지 않는다는 것입니다. 첫 번째 피 연산자가 이미 참이니 두 번째 피 연산자가 참이든 거짓이든 참이 분명하기 때문입니다.
일반적으로 논리식을 세울 때는 참 거짓을 판단하기 쉬운 쪽을 앞에 두는 것이 유리합니다. 간단하거나 참 거짓을 판단할 확률이 높은 수식이나 함수를 앞에 두면 뒤에 오는 수식이나 함수는 실행하지 않을 수도 있기 때문입니다.
여기서 윤년을 체크하는 논리식을 한번 세워보세요.
우선순위 12: 조건 삼항 연산자
? : 조건 삼항 연산자: 참 거짓을 비교하여 참일 때는 colon 기호의 왼쪽을 실행하고 거짓이면 오른쪽을 실행합니다. 프로그램을 간단하게 작성하게 도와주긴 하지만 삼항 연산자를 남발하게 되면 프로그램을 이해하거나 유지 보수하기 힘들어 지기도 합니다. 보통 a ? b : c ; 의 수식은 if(a){ b; }else{ c; }의 문장과 같은 동작을 합니다.
우선순위 13: 대입 연산자들
= *= /= %= += -= <<= >>= &= |= ^= 대입 연산자들: 대입연산자들은 우선순위가 매우 낮은 편입니다. 그리고 =를 제외한 나머지를 복합 대입 연산자라고 부릅니다. 복합 대입 연산자를 보면 대입연산자 왼쪽에 오는 연산자들이 산술 연산자, shift연산자, 비트 연산자라는 것을 알 수 있습니다. 복합 대입연산자를 사용할 때 주의할 것은 일반 다른 연산자들 보다 우선순위가 낮다는 것을 기억하셔야 합니다. 예를 들면 a *= b + c 는 a = a * b + c가 아니라 a = a * (b + c)로 동작한다는 것입니다. 더욱이 대입 연산자들은 양쪽 피 연산자들의 타입이 같아야 합니다. 대입 연산자는 타입에 민감한 연산들 중 하나입니다.
우선순위 14: 콤마 연산자
, 콤마 연산자: 콤마도 연산자였습니다. 콤마는 보통 데이터나 수식을 나열 할 때 사용합니다. 우선순위가 가장 낮습니다.
지금까지 설명한 연산자들의 의미와 우선 순위는 잘 외워야 합니다.
우리는 어렸을 적에 구구단을 외웠습니다. 머리 터지게 구구단을 외웠더니 이제는 아무리 복잡한 숫자도 서로 곱할 수 있게 되었습니다. 조금 과장해서 C프로그램은 98%가 연산자라고 했습니다. 그렇기 때문에 연산자의 의미와 우선순위를 잘 외워두면 아무리 복잡하고 어려운 프로그램도 만들어 내고 이해하고 분석할 수 있습니다. 여든 한 개의 식도 외우신 분들이 쉰 개도 안 되는 연산자쯤이야 거뜬히 외울 수 있겠지요? 인도에서는 구구단이 아니라 19단을 외운다고 들었습니다. 저는 그나마 구구단도 겨우 외웠는데 대한민국에 태어나서 정말 다행입니다. 그런 의미에서 8, 6에?