2.8 연산자와 수식
아래의 예를 보면 숫자 값 500에 변수 margin을 더한 후 2로 나누어 height라는 변수에 대입하고 있습니다.
height에는 수식의 결과 값인 255가 대입된 것을 print문으로 확인할 수 있습니다.
이와 같이 값이나 변수인 피연산자(operand)들을 다양한 연산자(operator)로 연결하여 수식(expression)을 작성할 수 있고 그 결과를 변수에 대입하거나, 명령문의 파라미터로 사용할 수 있습니다.
아래와 같이 덧셈과 곱셈을 괄호없이 쓰면 어떤 연산이 먼저 수행될까요? 덧셈, 뺄셈보다 곱셈, 나눗셈을 먼저 한다는 걸 알고 있지요? 이처럼 연산자들 사이에는 수행되는 순서가 있으며 이를 연산자 우선순위(operator precedence)라고 합니다. 곱셈의 우선순위가 덧셈보다 높기 때문에 뒤에 있지만 먼저 수행되는 것입니다.
print 10+10*2
문자열에 대해서도 + 연산자를 사용하면 문자열들이 연결(concatenate)됩니다.
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와 같은지를 뜻합니다. 예를 들어 아래의 두 행은 의미가 같습니다.
문자열에 대해 사용할 수 있는 연산자는 덧셈(+)과 비교연산(!=, ==), 대입연산(=)입니다. 문자열 덧셈은 피연산자 문자열들을 연결(concatenate)하며, 앞서 예를 보인 바 있습니다.
비교연산은 문자열이 다른지 같은지를 판단합니다.
간혹, 연산과정에서 피연산자의 자료형이 자동으로 바뀌는 경우도 있습니다.
비교연산자로 숫자와 문자열을 비교하면, 문자열로 통일하여 비교합니다.
논리연산자의 피연산자로 수치를 사용할 경우, 수치가 0이면 false, 0이 아니면 true로 간주합니다.
bitwise NOT과 shift left/right는 32bit 길이를 기반으로 계산합니다.
Last updated
Was this helpful?