반응형
💡솔리디티 기본 문법 - 연산자
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 |
댓글