수와 연산 Numbers and Operations
|
|
이항연산을 표현하는 방법으로,
연산자와 피연산자의 위치를 어떻게 적는지를 다룬다.
전위/후위 표기법은, 수식 표기법과 관련된 폴란드의 학자 Jan Łukasiewicz(얀 루카시에비치)의 이름/지역/국가 명을 붙여 부르기도 한다. 그 가운데는 (역) 폴란드 표기법을 가장 많이 쓴다.
전위 표기법: Łukasiewicz / Warsaw / Polish notation
후위 표기법: reverse Łukasiewicz / Warsaw / Polish notation
간단한 예제
방법
| 표기
|
전위
| +12
|
중위
| 1+2
|
후위
| 12+
|
prefix notation, Polish notation(PN)
연산자를 피연산자 앞에 배치하는 방법이다.
영어권에서는 후위 표기법보다 사용하기에 편하다. 왜냐하면 영어에서 수식을 읽을 때 전위 표기법의 순서와 같은 순서로 읽기 때문이다.
[1] 예를 들어 3+4는 'Add 3 and 4'라고 읽으므로 전위 표기법의 순서와 같다.
[A] 물론 중위 표기법으로 읽을 수도 있다. 수식을 중위 표기법으로 읽을 수 없는 언어는 존재하지 않는다.
따라서 후위 표기법보다 읽기 쉽고 중위 표기법보다 프로그램 구현이 간단하므로,
LISP,
엑셀등의 일부
언어는 전위 방식을 사용한다.
infix notation
연산자를 피연산자 사이에 배치하는 방법이다.
일반인들은 모두 이 방법으로 계산을 배우고 사용한다. 특정 분야의 사람들이 아니라면 중위 표기법만 배운다.
다른 표기법들과 다르게 연산의 우선순위
[2] 괄호 > 하이퍼 연산 > 거듭제곱, 제곱근, 로그, 삼각식, 계승 > 곱셈, 나눗셈 > 덧셈, 뺄셈 > (함수)
를 정해야 하고, 뺄셈이나 나눗셈 같은 비가환 연산(non-commutative operation)도 신경써야 한다.
#
postfix notation, reverse Polish notation(RPN)
연산자를 피연산자 뒤에 배치하는 방법이다.
한국어에서 사람이 수식을 읽는 순서와 같은 방식이다. 예를 들어 (3+4)×2는 '3과 4를 더한 것에 2를 곱한다.'로 읽힌다.
[A] 물론 중위 표기법으로 읽을 수도 있다. 수식을 중위 표기법으로 읽을 수 없는 언어는 존재하지 않는다.
스택을 사용하며 괄호가 필요없기 때문에 수식의 표현이 간단해지는 장점이 있다.
예를 들어 (4 + 5) / (2 - 1)은 역폴란드 표기법으로 4 5 + 2 1 - /로 표기하며 계산 순서는 다음과 같다.
- 4와 5를 스택에 넣는다.
- 스텍에서 값 2개를 빼서 덧셈을 계산하고 결과를 스택에 넣는다.
- 2와 1을 스택에 넣는다.
- 스텍에서 값 2개를 빼서 뺄셈을 계산하고 결과를 스택에 넣는다.
- 스텍에서 값 2개를 빼서 나눗셈을 계산하고 결과를 스택에 넣는다.
장점은 프로그램의 구현이 간단해지기 때문에 초기의 프로그래밍 언어
[3] 유닉스 계열 운영체제에 기본적으로 깔려있는 dc(desk calculator)라는 계산기 프로그램이 이 표기법을 사용하는데, 이는 심지어 C 언어보다도 오래된 프로그램이다.
에서 많이 쓰였다. 하지만 복잡한 수식을 표현하는데 어려움이 있으며 계산 순서가 틀릴 경우 어디가 잘못됐는지 알아차리기 힘들다. 수기로 작성하기에 불편하단 단점도 있다.
이 문단의 내용 중 전체 또는 일부는
문서의
r12 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}}에서 가져왔습니다.
이전 역사 보러 가기 이 문단의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
- [ 펼치기 · 접기 ]
문서의
r12 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
문서의
r 판{{{#!wiki style="display: inline; display: none;"
,
번 문단}}} (
이전 역사)
원래 표기법에 해당하는 '연산자 1개와 피연산자 2개' 단위로 괄호를 계속 친 다음, 순서대로 바꾸려는 새 표기법으로 변환한다. 괄호가 필요없어지면 지우면 끝이다.
예시
- 중위표기법 1+2×3 을 후위표기법으로 바꿀 때, 1+(2×3) → 1+(23×) → 1(23×)+ → 123×+
- 중위표기법 1+2×3 을 전위표기법으로 바꿀 때, 1+(2×3) → 1+(×23) → +1(×23) → +1×23