고급 배치파일 제 004강 : 정수형 수치연산 2 [목차보기]
지난번에는 단순히 set /a 를 이용한 수치연산이라면 이번엔, 복합 대입 연산 (+=, -=, *=, /=, %%=)
에 대해 알아봅시다.
◆ set /a opr= 수치처리 (단, opr는 연산자)
set /a 변수 연산자=연산식
이 뜻은 풀어서 설명 한다면
set /a 변수=변수 연산자 (연산식)
이 됩니다.
예를들어,
set /a a+=b
라는 것은
set /a a=a+b
으로 풀어쓸 수 있다라는 말입니다.
즉, 자기자신 a에 있는 값과 b에 있는 값을 서로 더해 다시 a로 저장을 하라라는 뜻입니다.
물론 역시, -, *, /, %%(나머지) 역시, 동일한 원리로 동작을 하게 됩니다.
아래 예제를 봅시다.
파일명 : 4-1.bat
@echo off
echo ==============================
echo 배치파일 예제 4-1 - 정수형 복합대입연산
echo ==============================
echo.
set /a a=123
set /a b=456
set /a a+=b
echo a = %a%
echo b = %b%
:: a와 b에 각각 숫자를 저장한 뒤, a+=b(즉,a=a+b) 를 수행
:: a의 연산결과는 미치나, b의 연산결과는 그대로 유지 (우변에는 아무런 영향을 미치지 않음)
echo.
pause>nul
수행결과
a = 579
b = 456
이와같이 a와 b의 값을 서로 더해 다시 a를 수행하는 코드가 됩니다.
다음은 다른 연산자도 쓸 수 있다라는 예제를 보여줍니다.
파일명 : 4-2.bat
@echo off
echo ==============================
echo 배치파일 예제 4-2 - 정수형 복합대입연산
echo ==============================
echo.
:: 먼저 a에 100을 초기화
set /a a=100
:: a의 값과 7을 더해 a에 다시 저장
set /a a+=7
echo a = %a%
:: a의 값과 10을 빼 a에 다시 저장
set /a a-=10
echo a = %a%
:: a의 값과 3을 곱해 a에 다시 저장
set /a a*=3
echo a = %a%
:: a의 값에서 5를 나눈 몫을 a에 다시 저장
set /a a/=5
echo a = %a%
:: a의 값에서 5를 나눈 나머지를 a에 다시 저장
set /a a%%=5
echo a = %a%
pause>nul
수행결과
a = 107
a = 97
a = 291
a = 58
a = 3
이와 같은 용도로 여러 연산자를 복합 대입 연산자로 쓸 수 있습니다.
◆ 연산자 우선순위
제가 설명하는 것 중에서, 중요한 것이 있는데요.
C언어와 비주얼베이직과 같이 배치파일 set /a에서도 우선 순위가 있습니다.
() 괄호
~ - 단항 (음수, 비트 NOT)
* / %% - 승제산
+ - - 가감산
<< >> - 비트 이동
% - 비트단위 and
^ - 비트단위 배타적 or (xor)
| - 비트단위 or
= *= /= %= += -= - 대입연산자
&= ^= |= <<= >>=
, - 식 구분 기호
예를 들어
set /a d=1234+a*b/10-c
가 있으면, 승제산(곱하기나누기) 인 a*b/10를 먼저 수행한 뒤 1234와
방금 수행한 a*b/10의 값을 더한 다음 c를 빼게 되어 있습니다.
파일명 : 4-3.bat
@echo off
echo ==============================
echo 배치파일 예제 4-3 - 연산자 우선순위
echo ==============================
echo.
set /a a=11
set /a b=22
set /a c=777
:: 먼저 a*b/10을 먼저 계산한 다음(24) 1234+24(방금 계산한 값)-777인 481을 d에 저장
set /a d=1234+a*b/10-c
echo d = %d%
pause>nul
수행결과 d = 481
이와 같이 수치 연산의 기본(set /a), 복합대입(set /a opr=), 연산자 우선순위에 알아 보았고,
다음 강의에서는 반복문에 대해서 알아봅시다.
'old drawer > programming' 카테고리의 다른 글
[배치파일] 6강 함수 (0) | 2013.01.10 |
---|---|
[배치파일] 5강 FOR 반복문 (1) | 2013.01.10 |
[배치파일] 3강 정수형 수치연산 (0) | 2013.01.10 |
[배치파일] 2강 일반 제어문 (0) | 2013.01.10 |
[배치파일] 1강 입력문 (0) | 2013.01.10 |