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을 리턴
한다.
처음에 나도 풀고 이해가 잘 안되었는데, 솔리디티에서 연산을 처리하는 방법 때문이었다. 솔리디티에서는 산술 연산을 왼쪽에서 오른쪽으로 진행하는데, 이때 계산에 사용되는 모든 숫자가 정수리터럴
일 경우에, 그 결과가 정수가 아닐 수 있다
.
리터럴은 코드 상에서 값을 직접 표현하는 표기법을 말한다. 즉, 변수에 할당할 수 있는 고정된 값을 의미한다. 위에서 말한 정수 리터럴
은 코드 상에서 직접 쓰인 정수 값을 의미한다. 예를 들어서 다음 코드에서 5와 10은 정수리터럴이다.
uint num1 = 5;
uint num2 = 10;
리터럴은 다양한 형태가 존재할 수 있다. 정수 리터럴 뿐만 아니라 실수 리터럴, 문자열 리터럴, 불 리터럴 등이 있다. 예를 들어서 "hello world"
도 문자열 리터럴이다. true
나 false
도 불 리터럴이다.