[Solidity] 풀어봐!

냐옹·2023년 7월 31일
0

Solidity

목록 보기
7/13
post-thumbnail
contract Integers{
    function getTwo() public pure returns(uint){
        uint a = 3;
        uint b = 2;
        return a / b * 2;
    }

    function getThree() public pure returns(uint){
        return 3 / 2 * 2;
    }
}

정답

getTwo() : 2
getThree() : 3

getTwo() 같은 경우는 3 / 2를 해서 반올림한다. 그럼 1이다. 이후에 1 * 2를 하면 2를 리턴하게 된다.

getThree() 같은 경우는 정수리터럴이므로 3 / 2 해서 1.5이다. 이후에 1.5 * 2를 계산해서 3을 리턴한다.

처음에 나도 풀고 이해가 잘 안되었는데, 솔리디티에서 연산을 처리하는 방법 때문이었다. 솔리디티에서는 산술 연산을 왼쪽에서 오른쪽으로 진행하는데, 이때 계산에 사용되는 모든 숫자가 정수리터럴일 경우에, 그 결과가 정수가 아닐 수 있다.

appendix_ 리터럴

리터럴은 코드 상에서 값을 직접 표현하는 표기법을 말한다. 즉, 변수에 할당할 수 있는 고정된 값을 의미한다. 위에서 말한 정수 리터럴은 코드 상에서 직접 쓰인 정수 값을 의미한다. 예를 들어서 다음 코드에서 5와 10은 정수리터럴이다.

uint num1 = 5;
uint num2 = 10;

리터럴은 다양한 형태가 존재할 수 있다. 정수 리터럴 뿐만 아니라 실수 리터럴, 문자열 리터럴, 불 리터럴 등이 있다. 예를 들어서 "hello world" 도 문자열 리터럴이다. truefalse도 불 리터럴이다.

0개의 댓글