English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
연산자는 컴파일러에게 지정된 수학적运算과 논리적运算을 수행하도록 명령하는 기호입니다.
Scala는 다음과 같은 여러 유형의 내장 연산자를 포함하고 있습니다:
수학 연산자
관계 연산자
논리 연산자
비트 연산자
대입 연산자
이제 우리는 위의 여러 연산자의 사용법을 자세히 설명하겠습니다.
다음 표는 Scala가 지원하는 수학 연산자를 나열합니다.
변수 A를 가정하면: 10B는 20:
연산자 | 설명 | 예제 |
---|---|---|
+ | 더하기 | A + B 계산 결과는 30 |
- | 뺄 | A - B 계산 결과는 -10 |
* | 곱 | A * B 계산 결과는 200 |
/ | 구분자 | B / A 계산 결과는 2 |
% | 나머지 | B % A 계산 결과는 0입니다 |
object Test { def main(args: Array[String]) { var a = 10; var b = 20; var c = 25; var d = 25; println("a + b = ", + (a + b)); println("a - b = ", + (a - b)); println("a * b = ", + (a * b)); println("b / a = ", + (b / a)); println("b % a = ", + (b % a)); println("c % a = ", + (c % a)); } }
위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:
$ scalac Test.scala $ scala Test a + b = 30 a - b = -10 a * b = 200 b / a = 2 b % a = 0 c % a = 5
다음 표는 Scala가 지원하는 관계 연산자를 나열합니다.
변수 A를 가정하면: 10B는 20:
연산자 | 설명 | 예제 |
---|---|---|
== | 일치 | (A == B) 계산 결과는 false입니다 |
!= | 불일치 | (A != B) 계산 결과는 true입니다 |
> | 이상 | (A > B) 계산 결과는 false입니다 |
< | 이하 | (A < B) 계산 결과는 true입니다 |
>= | 이상 | (A >= B) 계산 결과는 false입니다 |
<= | 이하 | (A <= B) 계산 결과는 true입니다 |
object Test { def main(args: Array[String]) { var a = 10; var b = 20; println("a == b = "} + (a == b) ); println("a != b = " + (a != b) ); println("a > b = " + (a > b) ); println("a < b = " + (a < b) ); println("b >= a = " + (b >= a) ); println("b <= a = " + (b <= a) ); } }
위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:
$ scalac Test.scala $ scala Test a == b = false a != b = true a > b = false a < b = true b >= a = true b <= a = false
다음 표는 Scala가 지원하는 논리 연산자를 나열합니다.
변수 A를 가정하면: 1B가 0입니다:
연산자 | 설명 | 예제 |
---|---|---|
&& | 논리 과 | (A && B) 연산 결과가 false입니다 |
|| | 논리 이거나 | (A || B) 연산 결과가 true입니다 |
! | 논리 비 | !(A && B) 연산 결과가 true입니다 |
object Test { def main(args: Array[String]) { var a = true; var b = false; println("a && b = " + (a&&b) ); println("a || b = " + (a||b) ); println("!(a && b) = " + !(a && b) ); } }
위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:
$ scalac Test.scala $ scala Test a && b = false a || b = true !(a && b) = true
비트 연산자는 이진 비트에 대한 연산을 수행합니다. ~, & , |, ^는 비트 반전, 비트 앤드, 비트 이온, 비트 이이치 연산을 나타냅니다. 다음은 예시입니다:
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
A를 지정하면: 60; 그리고 B = 13; 두 변수의 이진수는 다음과 같습니다:
A = 0011 1100 B = 0000 1101 -------비트 연산---------- A&B = 0000 1100 A|B = 0011 1101 A^B = 0011 0001 ~A = 1100 0011
Scala에서의 비트 연산 규칙은 다음과 같습니다:
연산자 | 설명 | 예제 |
---|---|---|
& | 비트 앤드 연산자 | (a & b) 출력 결과 12 ,이진 설명: 0000 1100 |
| | 비트 이온 연산자 | (a | b) 출력 결과 61 이진 설명: 0011 1101 |
^ | 비트 이이치 연산자 | (a ^ b) 출력 결과 49 이진 설명: 0011 0001 |
~ | 비트 반전 연산자 | (~a) 출력 결과 -61 이진 설명: 1100 0011하나의 부호 이진수의 보수 형식에서. |
<< | 왼쪽 이동 연산자 | a << 2 출력 결과 240, 이진 설명: 1111 0000 |
>> | 오른쪽 이동 연산자 | a >> 2 출력 결과 15 ,이진 설명: 0000 1111 |
>>> | 미정의 우측 이동 | A >>>2 출력 결과 15, 이진 설명: 0000 1111 |
object Test { def main(args: Array[String]) { var a = 60; /* 60 = 0011 1100 */ var b = 13; /* 13 = 0000 1101 */ var c = 0; c = a & b; /* 12 = 0000 1100 */ println("a & b = " + c ); c = a | b; /* 61 = 0011 1101 */ println("a | b = " + c ); c = a ^ b; /* 49 = 0011 0001 */ println("a ^ b = " + c ); c = ~a; /* -61 = 1100 0011 */ println("~a = " + c ); c = a << 2; /* 240 = 1111 0000 */ println("a << 2 = " + c ); c = a >> 2; /* 15 = 1111 */ println("a >> 2 = " + c ); c = a >>> 2; /* 15 = 0000 1111 */ println("a >>> 2 = " + c ); } }
위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:
$ scalac Test.scala $ scala Test a & b = 12 a | b = 61 a ^ b = 49 ~a = -61 a << 2 = 240 a >> 2 = 15 a >>> 2 = 15
아래는 Scala 언어가 지원하는 대입 연산자 목록입니다:
연산자 | 설명 | 예제 |
---|---|---|
= | 간단한 대입 연산, 오른쪽 연산자를 왼쪽 연산자에 대입합니다. | C = A + B은 A + B의 연산 결과를 C에 대입합니다 |
+= | 더하기 연산 후 대입, 양쪽의 연산자를 더하기 연산 후 왼쪽 연산자에 대입합니다. | C +A = A는 C = C와 동일합니다 + A |
-= | 빼기 연산 후 대입, 양쪽의 연산자를 빼기 연산 후 왼쪽 연산자에 대입합니다. | C -A = A는 C = C와 동일합니다 - A |
*= | 곱하기 연산 후 대입, 양쪽의 연산자를 곱하기 연산 후 왼쪽 연산자에 대입합니다. | C *A = A는 C = C와 동일합니다 * A |
/= | 나누기 연산 후 대입, 양쪽의 연산자를 나누기 연산 후 왼쪽 연산자에 대입합니다. | C /A = A는 C = C와 동일합니다 / A |
%= | 나머지 연산 후 대입, 양쪽의 연산자를 나머지 연산 후 왼쪽 연산자에 대입합니다. | C %= A는 C = C % A와 동일합니다 |
<<= | 비트별 좌측 이동 후 대입 | C <<= 2 C = C << 2 |
>>= | 비트별 우측 이동 후 대입 | C >>= 2 C = C >> 2 |
&= | 비트별 앤 연산 후 대입 | C &= 2 C = C & 2 |
^= | 비트별 이이푸 연산 후 대입 | C ^= 2 C = C ^ 2 |
|= | 비트별 연산 후 대입 | C |= 2 C = C | 2 |
object Test { def main(args: Array[String]) { var a = 10; var b = 20; var c = 0; c = a + b ; println("c = a") + b + c ); c += a ; println("c") += a + c ); c -= a ; println("c") -= a " + c ); c *= a ; println("c") *= a " + c ); a = 10; c = 15; c /= a ; println("c") /= a + c ); a = 10; c = 15; c %= a ; println("c %= a = " + c ); c <<= 2 ; println("c <<= 2 = " + c ); c >>= 2 ; println("c >>= 2 = " + c ); c >>= a ; println("c >>= a = " + c ); c &= a ; println("c &= 2 = " + c ); c ^= a ; println("c ^= a = " + c ); c |= a ; println("c |= a = " + c ); } }
위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:
$ scalac Test.scala $ scala Test c = a + b = 30 c += a = 40 c -= a = 30 c *= a = 300 c /= a = 1 c %= a = 5 c <<= 2 = 20 c >>= 2 = 5 c >>= a = 0 c &= 2 = 0 c ^= a = 10 c |= a = 10
연산자 우선순위는 연산자 그룹에 따라 결정되며, 계산식의 계산에 영향을 미칩니다.
예제: x = 7 + 3 * 2; 여기서 x 계산 결과는 13, 대신 20, 곱하기(*)는 더하기(+) 그래서 먼저 계산 3*2 추가로 7.
아래 표를 참조하세요. 우측에서 좌측으로 차례대로 감소하는 우선순위를 가집니다. 가장 위의 것은 가장 높은 우선순위를 가집니다. 콤마 연산자는 가장 낮은 우선순위를 가집니다.
분류 | 연산자 | 관련성 |
---|---|---|
1 | () [] | 왼쪽에서 오른쪽으로 |
2 | ! ~ | 오른쪽에서 왼쪽으로 |
3 | * / % | 왼쪽에서 오른쪽으로 |
4 | + - | 왼쪽에서 오른쪽으로 |
5 | >> >>> << | 왼쪽에서 오른쪽으로 |
6 | > >= < <= | 왼쪽에서 오른쪽으로 |
7 | == != | 왼쪽에서 오른쪽으로 |
8 | & | 왼쪽에서 오른쪽으로 |
9 | ^ | 왼쪽에서 오른쪽으로 |
10 | | | 왼쪽에서 오른쪽으로 |
11 | && | 왼쪽에서 오른쪽으로 |
12 | || | 왼쪽에서 오른쪽으로 |
13 | = += -= *= /= %= >>= <<= &= ^= |= | 오른쪽에서 왼쪽으로 |
14 | , | 왼쪽에서 오른쪽으로 |