8. Rust 연산자
연산자는 데이터에 대한 일부 작업을 수행하는 데 사용됩니다.
연산자가 연산을 수행하는 데이터를 피연산자라고 합니다.
예를 들어, 일반적인 덧셈 연산에서 더하기 기호( + ) 는 연산자입니다.
예를 들어
- 7 + 5 = 12
7과 5는 더하기 연산자( + ) 의 피연산자 라고 하고 , 12는 연산자 연산의 결과입니다.
Rust 언어는 다음 네 가지 연산자를 지원합니다.
- 산술 연산자
- 비트 연산자
- 관계 연산자
- 논리 연산자
8.1 산술 연산자
산술 연산자는 우리가 매일 사용하는 5가지 산술 연산( 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지) 입니다.
다음 표에는 Rust 언어에서 지원하는 모든 산술 연산자가 나열되어 있습니다.
아래 표에서는 a = 10, b = 5라고 가정합니다.
이름연산자예
| 설명 | 연산자 | 예시 |
| 더하기 | + | a+b의 결과는 15입니다. |
| 빼기 | - | ab의 결과는 5입니다. |
| 곱하기 | * | a*b의 결과는 50입니다. |
| 나누기 | / | a/b의 결과는 2 |
| 나머지 | % | %b의 결과는 0입니다. |
참고: Rust 언어는 증가 및 감소 연산자 ++ 및 -를 지원하지 않습니다.
8.1.1 예
다음 예에서는 위에서 언급한 모든 산술 연산자를 보여줍니다.
- fn main() {
- let num1 = 10 ;
- let num2 = 2;
- let mut res:i32;
- res = num1 + num2;
- println!("Sum: {} ",res);
- res = num1 - num2;
- println!("Difference: {} ",res) ;
- res = num1*num2 ;
- println!("Product: {} ",res) ;
- res = num1/num2 ;
- println!("Quotient: {} ",res);
- res = num1%num2 ;
- println!("Remainder: {} ",res);
- }
위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.
- Sum: 12
- Difference: 8
- Product: 20
- Quotient: 5
- Remainder: 0
8.2 관계 연산자
관계 연산자는 두 엔터티 간의 관계 유형을 테스트하거나 정의합니다.
관계 연산자는 둘 이상의 값 사이의 관계(보다 크거나 같거나 작거나)를 비교하는 데 사용됩니다.
관계 연산자의 반환 결과는 부울 유형 입니다 .
다음 표에는 Rust 언어에서 지원하는 모든 관계 연산자가 나열되어 있습니다.
아래 표에서는 A = 10, B = 20이라고 가정합니다.
이름연산자설명하다예
| 이름 | 연산자 | 설명 | 예시 |
| 보다 큼 | > | 왼쪽 피연산자가 오른쪽 피연산자보다 크면 true를 반환하고 그렇지 않으면 false를 반환합니다. | (A > B)는 false를 반환합니다. |
| 미만 | < | 왼쪽 피연산자가 오른쪽 피연산자보다 작으면 true, 그렇지 않으면 false를 반환합니다. | (A < B)는 true를 반환합니다. |
| 이상 | >= | 왼쪽 피연산자가 오른쪽 피연산자보다 크거나 같으면 true를 반환하고 그렇지 않으면 false를 반환합니다. | (A >= B)는 false를 반환합니다. |
| 보다 작거나 같음 | <= | 왼쪽 피연산자가 오른쪽 피연산자보다 작거나 같으면 true를 반환하고 그렇지 않으면 false를 반환합니다. | (A <= B)는 true를 반환합니다. |
| 동일한 | == | 왼쪽 피연산자가 오른쪽 피연산자와 같으면 true를 반환하고 그렇지 않으면 false를 반환합니다. | (A == B)는 true를 반환합니다. |
| 같지 않음 | != | 왼쪽 피연산자가 오른쪽 피연산자와 같지 않으면 true를 반환하고 그렇지 않으면 false를 반환합니다. | (A != B)는 false를 반환합니다. |
8.2.1 예
아래에서는 위에서 언급한 관계 연산자의 기능과 결과를 보여주기 위해 작은 코드 조각을 사용할 것입니다.
- fn main() {
- let A:i32 = 10;
- let B:i32 = 20;
- println!("Value of A:{} ",A);
- println!("Value of B : {} ",B);
- let mut res = A>B ;
- println!("A greater than B: {} ",res);
- res = A<B ;
- println!("A lesser than B: {} ",res) ;
- res = A>=B ;
- println!("A greater than or equal to B: {} ",res);
- res = A<=B;
- println!("A lesser than or equal to B: {}",res) ;
- res = A==B ;
- println!("A is equal to B: {}",res) ;
- res = A!=B ;
- println!("A is not equal to B: {} ",res);
- }
위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.
- Value of A:10
- Value of B : 20
- A greater than B: false
- A lesser than B: true
- A greater than or equal to B: false
- A lesser than or equal to B: true
- A is equal to B: false
- A is not equal to B: true
8.3 논리 연산자
논리 연산자는 두 개 이상의 조건을 결합하는 데 사용됩니다.
논리 연산자의 반환 결과도 부울 유형입니다.
다음 표에는 Rust 언어에서 지원하는 모든 논리 연산자가 나열되어 있습니다.
아래 표에서는 A = 10, B = 20이라고 가정합니다.
이름연산자설명하다예
| 이름 | 연산자 | 설명 | 예시 | |||
| 논리 AND | && | 두 조건식이 모두 true이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. | (A > 10 && B > 10)의 결과는 거짓입니다. | |||
| 논리적 또는 | ` | ` | 양쪽의 조건식 중 하나가 true이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. | (A > 10 | B >10) 결과는 참이다 | |
| 논리적 부정 | ! | 표현식이 true이면 false를 반환하고, 그렇지 않으면 true를 반환합니다. | !(A >10)의 결과는 true입니다. |
8.3.1 예
논리 연산자는 3개만 있으므로 간단합니다.
논리 연산자와 그 계산 결과를 사용하는 방법을 보여 주는 작은 코드를 작성해 보겠습니다.
- fn main() {
- let a = 20;
- let b = 30;
- if (a > 10) && (b > 10) {
- println!("true");
- }
- let c = 0;
- let d = 30;
- if (c>10) || (d>10){
- println!("true");
- }
- let is_else = false;
- if !is_else {
- println!("not else");
- }
- }
위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.
- true
- true
- not else
8.4 비트 연산자
다음 표에는 Rust가 지원하는 모든 비트 단위 연산이 나열되어 있습니다.
변수 A = 2, 변수 B = 3이라고 가정합니다.
- A 이진 형식
- 0 0 0 0 0 0 1 0
- B 이진 비트 형식은 다음과 같습니다.
- 0 0 0 0 0 0 1 1
| 이름 | 연산자 | 설명 | 예시 | ||
| 비트 AND | & | 동일한 비트가 모두 1이면 1을 반환하고, 그렇지 않으면 반환합니다. | 0(A & B) 결과는 2입니다. | ||
| 비트 또는 | ` | ` | 동일한 비트 중 하나가 1이면 1이 반환되고, 그렇지 않으면 0이 반환됩니다. | (A | B) 결과는 3이다. |
| XOR | ^ | 동일한 비트가 동일하지 않으면 1을 반환하고, 그렇지 않으면 0을 반환합니다. | (A ^ B) 결과는 1입니다. | ||
| - | ! 비트의 1을 0으로, 0을 1로 바꿉니다. | (!B) 결과 -4 | |||
| 왼쪽으로 이동 | << | 피연산자의 모든 비트는 지정된 비트 수만큼 왼쪽으로 이동하고 오른쪽의 비트는 0으로 채워집니다. | (A << 1) 결과는 4입니다. | ||
| 오른쪽으로 이동 | >> | 피연산자의 모든 비트는 지정된 비트 수만큼 오른쪽으로 이동하고 왼쪽의 비트는 0으로 채워집니다. | (A >> 1) 결과는 1입니다. |
8.4.1 예
다음 예에서는 위에서 언급한 모든 비트 연산자를 보여줍니다.
- fn main() {
- let a:i32 = 2; // 이진 표현은 다음과 같습니다. 0 0 0 0 0 0 1 0
- let b:i32 = 3; // 이진 표현은 다음과 같습니다. 0 0 0 0 0 0 1 1
- let mut result:i32;
- result = a & b;
- println!("(a & b) => {} ",result);
- result = a | b;
- println!("(a | b) => {} ",result) ;
- result = a ^ b;
- println!("(a ^ b) => {} ",result);
- result = !b;
- println!("(!b) => {} ",result);
- result = a << b;
- println!("(a << b) => {}",result);
- result = a >> b;
- println!("(a >> b) => {}",result);
- }
위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.
- (a & b) => 2
- (a | b) => 3
- (a ^ b) => 1
- (!b) => -4
- (a << b) => 16
- (a >> b) => 0