4장: 수식, math
1. 수학 표현식 개요
TCL의 수학 표현식은 숫자 계산을 수행하는 데 사용됩니다. expr
명령을 통해 평가됩니다.
기본 구문:
expr 수식
2. 기본 연산자
덧셈:
+
뺄셈:
-
곱셈:
*
나눗셈:
/
모듈로 (나머지):
%
거듭제곱:
**
예시:
puts [expr {5 + 3}] # 출력: 8
puts [expr {10 - 4}] # 출력: 6
puts [expr {3 * 4}] # 출력: 12
puts [expr {20 / 4}] # 출력: 5
puts [expr {17 % 5}] # 출력: 2
puts [expr {2 ** 3}] # 출력: 8
3. 비교 연산자
같음:
==
다름:
!=
크다:
>
작다:
<
크거나 같다:
>=
작거나 같다:
<=
예시:
puts [expr {5 == 5}] # 출력: 1 (참)
puts [expr {5 != 4}] # 출력: 1 (참)
puts [expr {6 > 4}] # 출력: 1 (참)
puts [expr {3 < 2}] # 출력: 0 (거짓)
4. 논리 연산자
AND:
&&
OR:
||
NOT:
!
예시:
puts [expr {(5 > 3) && (2 < 4)}] # 출력: 1 (참)
puts [expr {(5 < 3) || (2 < 4)}] # 출력: 1 (참)
puts [expr {!(5 < 3)}] # 출력: 1 (참)
5. 비트 연산자
2진수 수준에서 비트를 연산합니다.
예를들어,
10진수 1은 1,
10진수2는 10,
10진수 4는 100입니다.
2진수 100을 '>>' 하면 비트가 하나씩 오른쪽으로 옮겨져 2진수 10이 됩니다.
AND:
&
OR:
|
XOR:
^
NOT:
~
왼쪽 시프트:
<<
오른쪽 시프트:
>>
예시:
puts [expr {5 & 3}] # 출력: 1
puts [expr {5 | 3}] # 출력: 7
puts [expr {5 ^ 3}] # 출력: 6
puts [expr {~5}] # 출력: -6
puts [expr {1 << 3}] # 출력: 8
puts [expr {8 >> 1}] # 출력: 4
6. 수학 함수
TCL은 다양한 내장 수학 함수를 제공합니다:
절대값:
abs(x)
제곱근:
sqrt(x)
지수:
exp(x)
로그:
log(x)
,log10(x)
삼각함수:
sin(x)
,cos(x)
,tan(x)
반올림:
round(x)
최대/최소:
max(x,y)
,min(x,y)
예시:
puts [expr {abs(-5)}] # 출력: 5
puts [expr {sqrt(16)}] # 출력: 4.0
puts [expr {round(3.7)}] # 출력: 4
puts [expr {max(5, 10)}] # 출력: 10
7. 변수 사용
수학 표현식 내에서 변수를 직접 사용할 수 있습니다:
set x 5
set y 3
puts [expr {$x + $y}] # 출력: 8
8. 주의사항 ⚠️
부동소수점 연산 시 정밀도 주의.
0으로 나누기 오류 주의
복잡한 표현식은 가독성을 위해 괄호 사용 권장
9. 여러 수학식 사용 및 계산 우선순위
TCL의 수학 표현식에서 연산자 우선순위는 일반적인 수학 규칙을 따릅니다. 우선순위가 높은 연산자가 먼저 계산됩니다.
우선순위 (높음에서 낮음 순):
()
괄호**
거듭제곱*
,/
,%
곱셈, 나눗셈, 나머지 연산+
,-
덧셈, 뺄셈<<
,>>
비트 시프트<
,>
,<=
,>=
비교 연산자==
,!=
동등성 비교&
비트 AND^
비트 XOR|
비트 OR&&
논리 AND||
논리 OR?:
삼항 연산자
예시:
puts [expr {2 + 3 * 4}] # 출력: 14 (3 * 4가 먼저 계산됨)
puts [expr {(2 + 3) * 4}] # 출력: 20 (괄호 안이 먼저 계산됨)
puts [expr {1 + 2 * 3 ** 2}] # 출력: 19 (3 ** 2 -> 2 * 9 -> 1 + 18 순서로 계산)
11. 팁과 요령 💡
복잡한 표현식은 괄호를 사용하여 의도를 명확히 표현. 리뷰어를 위해.
여러 수학식을 사용할 때는 각 식의 목적을 주석으로 설명
우선순위가 불분명한 경우 괄호를 사용하여 명시적으로 순서 지정
긴 표현식은 여러 줄로 나누어 가독성 향상
Last updated