본문 바로가기
블록체인/WEB3 개발

솔리디티 기본 문법 - 연산자

by 제이제이_은재 2022. 7. 8.
반응형

 

💡솔리디티 기본 문법 - 연산자

 

1 + 2 라는 간단한 식으로 생각해보았을 때, "1" 과 "2" 는 피연산자, "+" 는 연산자라고 한다. 솔리디티는 다음과 같은 유형의 연산자를 지원한다.

 

- 산술 연산자

- 비교 연산자

- 논리 연산자

- 할당 연산자

- 비트 연산자

- 조건부 연산자

 

 

✓ 산술 연산자 (Arithmetic Operators)

 

피연산자의 수학적 연산을 수행하는 데 사용한다.

연산자 의미
+  두 개의 연산자를 더하는데 사용한다.
-  첫 번째 피연산자에서 두 번째 피연산자를 빼는데 사용한다.
*  두 개의 피 연산자를 곱하는데 사용한다.
/  첫 번째 피연산자를 두 번째 피연산자로 나누는 데 사용한다.
%  첫 번째 피연산자를 두 번째 피연산자로 나눈 나머지를 제공한다.
++  정수 값을 1씩 증가시킨다.
--  정수 값을 1씩 감소시킨다.

 

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.14;
// 컨트랙트 생성
contract SolidityTest {
 
     // 변수 선언 및 초기화
    uint16 public a = 20;
    uint16 public b = 10;
 
    // + 연산자를 활용한 덧셈 및 초기화
		// sum == 30
    uint public sum = a + b;
 
    // - 연산자를 활용한 뺄셈 및 초기화
		// diff == 10
    uint public diff = a - b;
 
    // * 연산자를 활용한 곱셈 및 초기화
		// mul == 200
    uint public mul = a * b;
 
    // / 연산자를 활용한 나눗셈 및 초기화
    // div == 2
    uint public div = a / b;
 
    // % 연산자를 활용한 나머지 계산 및 초기화
    // mod == 0
    uint public mod = a % b;

    // ++ 연산자를 활용한 1 증가
    // inc == 21
    uint public inc = ++a;
     
    // -- 연산자를 활용한 1 감소
    // dec == 9
    uint public dec = --b;
 
}

 

✓ 비교 연산자 (Comparison Operators)

피연산자를 서로 비교하는데 사용한다.

 

연산자 의미
== 두 값이 같은지 여부를 확인한다. 같으면 true를 반환하고, 그렇지 않으면 false를 반환한다.
!= 두 값이 같지 않은지 여부를 확인한다. 같지 않으면 true를 반환하고, 그렇지 않으면 false를 반환한다.
> 왼쪽 값이 오른쪽 값보다 큰지 여부를 확인한다. 더 크다면 true를 반환하고, 그렇지 않으면 false를 반환한다.
< 왼쪽 값이 오른쪽 값보다 작은지 여부를 확인한다. 더 작다면 true를 반환하고 그렇지 않으면 false를 반환한다.
>= 왼족 값이 오른쪽 값보다 크거나 같은지 여부를 확인한다. 더 크거나 같다면 true를 반환하고, 그렇지 않으면 false를 반환한다.
<= 왼쪽 값이 오른쪽 값보다 작거나 같은지 여부를 확인한다. 더 작거나 같다면 true를 반환하고, 그렇지 않으면 false를 반환한다.

 

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.14;
// 컨트랙트 생성
contract SolidityTest {
 
    // 변수 선언 및 초기화
    uint16 public a = 20;
    uint16 public b = 10;
 
    // == 연산자를 활용한 비교 및 초기화
    // eq == false
    bool public eq = a == b;
 
    // != 연산자를 활용한 비교 및 초기화
    // noteq == true
    bool public noteq = a != b;
    
    // > 연산자를 활용한 비교 및 초기화
    // gtr == true
    bool public gtr = a > b;
 
    // < 연산자를 활용한 비교 및 초기화
    // les == false
    bool public les = a < b;
 
    // >= 연산자를 활용한 비교 및 초기화
    // gtreq == true
    bool public gtreq = a >= b;
 
    // <= 연산자를 활용한 비교 및 초기화
    // leseq == false
    bool public leseq = a <= b;
     
}

 

✓ 논리 연산자 (Logical Operators)

 

둘 이상의 조건을 결합하는데 사용한다.

연산자 의미
&& 두 조건이 모두 참인지 여부를 확인한다. 모두 참이면 true를 반환하고, 하나 또는 둘 다 거짓이면 false를 반환한다.
|| 최소 하나의 조건이 참인지 여부를 확인한다. 하나 또는 두 조건이 참이면 true를 반환하고 둘 다 거짓이면 false를 반환한다.
! true를 false로, false는 true로 반전한다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.14;
// 컨트랙트 생성
contract SolidityTest {
		
		// 변수 선언 및 초기화
    bool public a = true;
    bool public b = false;

    // && 연산자를 활용한 조건 결합 및 초기화
		// and == false
    bool public and = a && b;
    
    // || 연산자를 활용한 조건 결합 및 초기화
		// or == true
    bool public or = a || b;
    
    // ! 연산자를 활용한 조건 반전 및 초기화
		// not == false
    bool public not = !a;
     
}

 

✓ 할당 연산자 (Assignment Operators)

 

변수에 값을 할당하기 위해 사용한다. 왼쪽의 피연산자에 오른쪽의 피연산자를 할당한다. 산술 연산자와 = 연산자가 조합된 것이다.

 

연산자 의미
= 오른쪽에 있는 피연산자를 왼쪽에 있는 피연산자에 할당한다.
+= 오른쪽의 피연산자를 왼쪽의 피연산자에 더하고 그 값을 할당한다.
-= 왼쪽 피연산자에서 오른쪽 피연산자를 빼고 그 값을 할당한다.
*= 피연산자를 모두 곱하고 그 값을 할당한다.
/= 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 그 값을 할당한다.
%= 왼쪽의 피연산자를 오른쪽 피연산자로 나눈 나머지 값을 할당한다.

 

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.14;
// 컨트랙트 생성
contract SolidityTest {
 
    // 변수 선언 및 초기화
    uint16 public assignment = 20;
    uint public assignment_add = 50;
    uint public assign_sub = 50;
    uint public assign_mul = 10;
    uint public assign_div = 50;
    uint public assign_mod = 32;
   
    function getResult() public{
       assignment_add += 10; // += 연산자 사용. 60
       assign_sub -= 20; // -= 연산자 사용. 30
       assign_mul *= 10; // *= 연산자 사용. 100
       assign_div /= 10; // /= 연산자 사용. 5
       assign_mod %= 20; // %= 연산자 사용. 12
       return ;
    }
}

 

✓ 비트 연산자 (Bitwise Operators)

비트 수준 연산을 수행하는데 사용한다.

 

연산자 의미
& 정수의 각 비트에 대해 부울 AND 연산을 수행한다. 
| 정수의 각 비트에 대해 부울 OR 연산을 수행한다.
^ 정수의 각 비트에 대해 부울 배타적 OR 연산을 수행한다.
~ 정수의 각 비트에 대해 부울 NOT 연산을 수행한다.
<< 왼쪽 연산자의 모든 비트를 오른쪽 피연산자에 의해 지정된 위치 수만큼 왼쪽으로 이동한다.
>> 왼쪽 피연산자의 모든 비트를 오른쪽 피연산자에 의해 지정된 위치 수만큼 오른쪽으로 이동한다.
X Y X&Y X Y X^Y ~X
0 0 0 0 0 1 1
0 1 0 1 1 1 1
1 0 0 1 1 0 0
1 1 1 1 0 0 0
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
// 컨트랙트 생성
contract SolidityTest {
 
    // 변수 선언 및 초기화
    uint16 public a = 20;
    uint16 public b = 10;
		// a는 10100
		// b는 01010
 
    // &를 활용한 비트 AND 연산 및 초기화
    // and == 0
    uint16 public and = a & b;
 
    // |를 활용한 비트 OR 연산 및 초기화
    // or === 30
    uint16 public or = a | b;
 
    // ^를 활용한 비트 ㅐ탖OR 연산 및 초기화
    // or === 30
    uint16 public xor = a ^ b;
 
    // Initializing a variable
    // to '<<' value
    uint16 public leftshift = a << b;
 
    // Initializing a variable
    // to '>>' value
    uint16 public rightshift = a >> b;
   
    // Initializing a variable
    // to '~' value
    uint16 public not = ~a ;
     
}

 

 

✓ 조건부 연산자 (Conditional Operators)

 

조건식의 true, false 반환 값에 따라 특정 값을 반환하고자 할 때 사용한다. 삼항 연산자라고도 한다.

 

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.14;
// 컨트랙트 생성
contract SolidityTest{
 
     function sub(
       uint a, uint b) public view returns(
       uint){
      uint result = (a > b? a-b : b-a);
      return result;
 }
}

/*
만약 a의 값이 2, b의 값이 1 이라면 a > b가 true가 되어 a-b의 값을 리턴합니다.
만약 a의 값이 1, b의 값이 1 이라면 a > b가 false가 되어 b-a의 값을 리턴합니다.
만약 a의 값이 1, b의 값이 2 이라면 a > b가 false가 되어 b-a의 값을 리턴합니다.
*/
반응형

'블록체인 > WEB3 개발' 카테고리의 다른 글

솔리디티 기본 문법 - 함수 제어자  (0) 2022.07.08
솔리디티 기본 문법 - 함수  (0) 2022.07.08
솔리디티 기본문법 - 자료형  (0) 2022.07.08
솔리디티 기본문법 - 변수  (0) 2022.07.08
솔리디티란?  (0) 2022.07.08

댓글