SNS을 하다 재밌는 짤을 봤다.
말도 안되는 것처럼 보이지만 즐거운 C의 세계에서는 가능하다.
12 ≦ x ≦ 0
연산자 우선순위를 보자.
<
,>
,<=
,>=
: 왼쪽에서 오른쪽
읽기 쉽게 괄호를 치자.
12 <= x <= 0
는 (12 <= x) <= 0
와 같다.
C의 세계에서는 true/false가 1/0이나 마찬가지니까 (1 or 0) <= 0
라고 쓸수있다.
12 <= x
가 false인 x를 찾으면 된다. x는 12보다 작다.
12 ≦ x ≦ 7
12 <= x <= 7
에 괄호를 치면 (12 <= x) <= 7
이다.
true/false는 1/0이 들어가니까 (1 or 0) <= 7
이다.
1과 0 모두 7보다는 작으니 x가 뭐가 되든 성립한다.
source code
#include <cstdio>
#include <cassert>
bool check(int x) {
auto a = (12 <= x <= 0);
auto b = (12 <= x <= 7);
return a && b;
}
int main(void) {
// invalid
assert(check(12) == false);
// valid
assert(check(11));
assert(check(10));
assert(check(0));
assert(check(1));
return 0;
}
연습 문제
- C++ 연산자 오버로딩을 이용해서
12 ≦ x ≦ 0, 12 ≦ x ≦ 7
가 성립하는 x를 구현하시오.