사실 괄호를 사용하지 않고 계산 할 수 있는 prefix(연산자를 앞에 표시. 2+3의 경우는 +23)와 postfix(연산자를 뒤에 표시. 앞의 예에서 23+) 표기법이 아닌, 우리가 일상 사용하는 infix 표기법(연산자가 숫자의 중앙에 오는 방식. 2+3)의 경우는 괄호를 반드시 사용하는게 좋은 듯 합니다. 사칙연산 기호의 우선순위는 정해져 있지만, 가끔 헷갈리기도 하죠.
예를 들어, 2*3+4*2의 경우는 (2*3)+(4*2)라고 표현하는게 좋고, 2/3/4는 (2/3)/4로 하는게 좋습니다. 사실 2^3^4의 경우는 더욱 괄호의 중요성이 높아집니다. 분명 같은 연산자가 연속으로 사용됐음에도 불구하고, 이 결과는 (2^3)^4가 아니라, 2^(3^4)입니다. 제곱의 경우는 뒤부터 처리해야 하므로... ( '^'기호는 컴퓨터에서 제곱을 의미합니다. ^3은 세제곱, ^4는 네제곱. 물론 종이에 쓸 땐 ^3이 2보다 위에 있으므로 헷갈릴 염려는 없지만요.)
과거로 돌아가서 연산자의 생성 시점에서 봤을 때, 아무래도 괄호는 infix자체의 표기보다 이후에 생겨난 듯 하더군요. 초기 수학에서는 덧셈 뺄셈이 먼저 만들어지고, 곱셈과 나눗셈이 나중에, 제곱이 생겨나고, 괄호가 생겨났다고 하는데요.
'2+(3*4)'에서 이걸 postfix, prefix 표기법으로 표현하면 사실 간단해집니다.
연산자를 먼저 두는 prefix 표기에서는 '+*342'이렇게 표현하고, postfix의 경우는 '34*2+'라고 표기합니다. prefix의 경우는 최초의 숫자가 나오면 앞 연산자를 이용해서 다음 두 수를 연산하고, 반대로 postfix의 경우는 최초의 연산자가 나오면 앞의 두 수를 계산하는데요. 여기선 각 연산자에 우선 순위가 문제가 아니라, 출현시기가 문제가 됩니다. 따라서 강제적으로 먼저 연산하게 하는 괄호가 사실상 필요없죠. 곱셈이든, 뺄셈이든 우선순위를 둘 필요도 없습니다.
컴퓨터공학(혹은 논리학) 등에서 컴퓨터가 이해하는 방식을 알기 위해서, 서로 다른 표기법을 교환하는 부분을 배우게 되는데... 괄호가 없고, infix방식이 왼쪽에서 오른쪽으로만 읽을 수 있다면 간단합니다. 문제는 괄호가 있고, 또 곱셈/나눗셈이 우선순위가 있어서, 왼쪽에서 오른쪽으로 읽을 수 없다는거죠. (... 사실 위의 2+(3*4)도 prefix와 postfix로 바꾸기 난해한 이유는, 이게 3*4+2로 표기되지 않아서 입니다. 3*4+2로 표현되었다면, +*342와 34*2+가 별로 어렵지 않은데...)
다시 우리가 쓰는 표기법으로 돌아오면 위 계산에서 그러니까 2+(3*4)이 경우 괄호를 분리하려고 하면, 그리고 연산자 우선순위 없이 계산하려고 하면, 엄밀히 말해서 3*4+2라고 표기해야겠죠. 우리가 가진 규칙대로 연산자 우선순위가 없다면 2+3*4는 5*4=20이 될 겁니다.
그런데, 사실 덧셈이 먼저 생겼고, 곱셈은 사실 덧셈에서 빠져나온 연산자인데.. 곱셈이라는 건 덧셈을 여러번 계산한다는 의미니까요. 3*4는 3을 4번 더하라는 것이고, infix에서 연산자가 가지는 의미는 앞의 숫자와 뒤의 숫자를 계산하라는 뜻이 될 듯 합니다.
그렇다면 위의 2+3*4가 5*4로 되는 방식은 약간 이상해집니다. *4는 앞의 숫자를 4번 곱하는데.. 이 연산자의 범위는 엄밀히 말해서 앞의 숫자에 한정되어야 하는게 아닐까요? 2+3*4에서는 2+3+3+3+3이라고 보는 것이 (2+3)+(2+3)+(2+3)+(2+3)이라고 보는 것보다 훨씬 본래 연산자의 역할을 충실히 수행하는거란 생각입니다. 후자의 경우는 특별한 이유없이 *4가 연산전체에 영향을 미치게 되는거죠. 연산자는 앞의 숫자와 뒤의 숫자를 계산하는게 목적인데 말이죠.
덧셈이나 뺄셈의 경우는 본래 기능만 수행하지만, 곱셈과 나눗셈은 앞의 개념에서 확장된 개념이므로... 같은 이유로 제곱도 곱셈에서 확장되었으므로, 더 빠른 연산 우선순위를 가져야 하겠죠. (* 쓰고나서 읽어보니 복잡해서 간단히 정리하면, '연산자'는 앞의 숫자와 뒤의 숫자를 계산하라는 의미이고... 덧셈은 어디에 가더라도 상관없지만, 곱셈의 경우 계산 순서에 따라 결과값이 달라지므로, 연산자가 원래 가진 앞의 숫자와 뒤의 숫자를 계산하는데 충실하려면, 이걸 먼저 계산해야한다는 이야기였습니다.)
사실 앞의 예에서 2^3^4의 경우도, 거듭제곱은 엄밀히 말해 다시 곱셈에서 빠져나온 개념이라면 우선순위가 다른게 맞다는 생각을 해봅니다. 2*3이 2를 3번 더하는 것이듯, 2^3은 2를 3번 곱하는 의미가 되므로... 2^3^4는 (3을 4번 곱한수만큼) 2를 곱하라는 의미가 되는군요. 2*3^4의 경우는 정확히 표현하면 2*(3^4)가 되고, ^는 곱의 의미의 확장이고, 또 앞과 뒤의 숫자에만 영향을 미쳐야 합니다.
(덧) 사실 요즘 트랙백(Trackback)이라는 개념에 대해서 다시금 생각해보고 있습니다. 상호트랙백(트랙백을 서로 주고 받는 것)에 대한 글을 쓰고 있는데, 원래 트랙백의 개념을 실천하고자... 댓글이 아닌 글을 작성해서, 트랙백으로 날려봅니다. ^^ 간단히 정리하면, 트랙백은 (순환하는) 링크를 만드는게 목적이 아니라, 의견(토론)을 할 수 있는 속성이 강한 듯 해서... 사실 원래 글의 주제가 시작된 링크는 제일 상단에 적은 작은인장님의 글 주소 하나면 해결되는 문제니까 말이죠. ^^

에서 구독하세요


댓글을 남겨주세요
아니 저번 불륜에 이어 이런 주제까지... orz
왜 이러는 거요~
봉사마 정신 차리시요!!! 퍽퍽퍽=3
아.....-_-
어렵습니다.
관리자만 볼 수 있는 댓글입니다.