2.8 연산자와 수식

아래의 예를 보면 숫자 값 500에 변수 margin을 더한 후 2로 나누어 height라는 변수에 대입하고 있습니다.

var height, margin=10
height=(500+margin)/2
print height

height에는 수식의 결과 값인 255가 대입된 것을 print문으로 확인할 수 있습니다.

이와 같이 값이나 변수인 피연산자(operand)들을 다양한 연산자(operator)로 연결하여 수식(expression)을 작성할 수 있고 그 결과를 변수에 대입하거나, 명령문의 파라미터로 사용할 수 있습니다.

아래와 같이 덧셈과 곱셈을 괄호없이 쓰면 어떤 연산이 먼저 수행될까요? 덧셈, 뺄셈보다 곱셈, 나눗셈을 먼저 한다는 걸 알고 있지요? 이처럼 연산자들 사이에는 수행되는 순서가 있으며 이를 연산자 우선순위(operator precedence)라고 합니다. 곱셈의 우선순위가 덧셈보다 높기 때문에 뒤에 있지만 먼저 수행되는 것입니다.

print 10+10*2

문자열에 대해서도 + 연산자를 사용하면 문자열들이 연결(concatenate)됩니다.

var name="axis1", type="rotational"
print name + ":" + type

HRScript가 지원하는 연산자는 아래와 같습니다. 위에 있을수록 연산자 우선순위가 높습니다. (즉, 먼저 수행됩니다.)

연산자
의미

( )

괄호 (grouping)

(10+10)*2 ; 40

[ ]

배열 요소 접근

arr[3]

**

승 (exponentiation)

10**3 ; 1000

+x, -x

부호 (sign)

-300

*, /, mod

곱셈, 나눗셈, 나머지

300/3 ; 100, 8 mod 3 ; 2

+, -

덧셈, 뺄셈

300-100 ; 200

~

bitwise NOT

~0b11010010

; 0b11111111111111111111111100101101

&

^

|

<<

>>

bitwise AND

bitwise XOR

bitwise OR

shift left

shift right (부호유지)

0b11010010 & 0b11110000 ; 0xd0

0b11010010 ^ 0b11110000 ; 0x22

0b11010010 | 0b11110000 ; 0xf2

0b11010010 << 2 ; 0b1101001000

0b11010010 >> 2 ; 0b00110100

<, <=, >, >=,

!=, ==

비교연산

!=는 다르다. ==는 같다.

30 <= 29 ; false

response != "ok"

not x

논리연산 NOT

not error_state

and

or

논리연산 AND

논리연산 OR

height>100 and invert==false

timeout or work_count>3

피연산자가 수치나 bool값일 경우, 비교연산과 논리연산의 결과는 bool자료형이며, 나머지 연산의 결과 형은 숫자 자료형입니다.

bool형의 피연산자를 비교연산자 없이 그대로 쓰면, 그 값이 true와 같은지를 뜻합니다. 예를 들어 아래의 두 행은 의미가 같습니다.

var result= timeout
var result= (timeout==true)

문자열에 대해 사용할 수 있는 연산자는 덧셈(+)과 비교연산(!=, ==), 대입연산(=)입니다. 문자열 덧셈은 피연산자 문자열들을 연결(concatenate)하며, 앞서 예를 보인 바 있습니다.

비교연산은 문자열이 다른지 같은지를 판단합니다.

var response="ok"
print response=="ok"
print response=="ng"

간혹, 연산과정에서 피연산자의 자료형이 자동으로 바뀌는 경우도 있습니다.

비교연산자로 숫자와 문자열을 비교하면, 문자열로 통일하여 비교합니다.

print 123=="123" # true

논리연산자의 피연산자로 수치를 사용할 경우, 수치가 0이면 false, 0이 아니면 true로 간주합니다.

var count_a=1, count_b=0, height=100
print count_a and height>99
print count_b and height>99

bitwise NOT과 shift left/right는 32bit 길이를 기반으로 계산합니다.

Last updated

Was this helpful?