본문 바로가기

old drawer/programming

[배치파일] 4강 정수형 수치연산 2

고급 배치파일 제 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