숫자 사용하기

이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07

숫자 연산하기

숫자 연산에는 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%), 시프트(<<, >>), 비트 반전(^) 연산자를 사용할 수 있습니다.

var num1 uint8 = 3
var num2 uint8 = 2

fmt.Println(num1 + num2)  // 5
fmt.Println(num1 - num2)  // 1
fmt.Println(num1 * num2)  // 6
fmt.Println(num1 / num2)  // 1
fmt.Println(num1 % num2)  // 1
fmt.Println(num1 << num2) // 12
fmt.Println(num1 >> num2) // 0
fmt.Println(^num1)        // 252: 비트 반전 연산자

숫자끼리 연산을 할 때 서로 자료형이 다르면 컴파일 에러가 발생합니다. 따라서 명시적으로 자료형을 변환(Conversion)해주어야 합니다.

var num1 int = 3
var num2 float32 = 2.2

fmt.Println(num1 + num2)           // 정수 + 실수이므로 컴파일 에러
fmt.Println(float32(num1) + num2)  // 5.2: 정수를 실수로 변환
fmt.Println(num1 + int(num2))      // 5: 실수를 정수로 변환하여 0.2를 버림

자료형을 변환할 때 실수(float32)를 정수(int)로 변환하면 소수점 이하 값을 버리게 되므로 주의해야 합니다.

다음과 같이 uint32에서 uint16으로 변환하는 것처럼 크기가 작은 자료형으로 변환하면 넘치는 값을 버리게 됩니다.

var num1 uint16 = 10
var num2 uint32 = 80000

fmt.Println(num1 + uint16(num2)) // 14474: uint32에서 uint16으로 변환하면서 넘치는 값을 버림

80010이 나와야 하는데 실행을 해보면 14474가 나옵니다. 왜냐하면 uint16에서 저장할 수 있는 가장 큰 숫자는 65535인데 uint32 변수에 저장된 80000을 uint16으로 변환하면서 넘치는 값은 버리기 때문입니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

01 June 2015