17. 변수의 값을 특정 범위에서 순환하게 하기
안녕하세요. 언제나 휴일, 언휴예요.
이번에는 나머지 연산자를 알아보기로 해요.
Go 언어에서 나머지 연산자는 두 개의 정수 형식을 피연산자로 둘 수 있어요. 정수/정수의 연산 결과가 나머지를 버린 몫이라고 앞에서 얘기했었죠. 정수/정수에서의 나머지를 구할 때 나머지 연산자 %를 사용해요.
그런데 나머지 연산자는 산술 연산을 하기 위한 목적보다도 특정 범위의 정수에서 순환하게 할 때 더 많이 사용합니다. 10개의 요소를 맨 앞에서부터 순차적으로 접근하고 맨 마지막 요소를 접근한 후에 다시 맨 앞에서부터 접근하고자 할 때처럼 변수의 값을 특정 범위의 정수에서 순환하게 할 때가 제법 많이 나와요.
새 프로젝트를 생성하여 정수 형식의 변수를 특정 범위에서 순환하게 하는 코드를 작성해 보아요.
[그림 1] LiteIDE에서 새 프로젝트 생성 및 소스 파일 추가
정수 형식 변수를 0, 1, 2, 3, 4, 0, 1, 2, ... 순으로 변화게 해 봅시다. 순환할 수의 개수는 5예요. 상수를 하나 정의하고 정수 형식 변수 i를 선언하고 0으로 초기 설정하세요.
const max_elem int = 5
var i int = 0
i = (i+1)%max_elem 구문은 i에 1을 더한 후에 max_elem으로 나눈 나머지를 i에 대입하는 연산이예요.
만약 i가 0이고 max_elem이 5일 때 i=(0+1)%5 를 수행하겠죠. 1을 5로 나누면 몫은 0이고 나머지는 1이므로 i에 1을 설정하는 결과를 가져옵니다.
만약 i가 1이고 max_elem이 5일 때 i=(1+1)%5 를 수행하겠죠. 2를 5로 나누면 몫은 0이고 나머지는 2이므로 i에 2를 설정하는 결과를 가져옵니다.
만약 i가 2이고 max_elem이 5일 때 i=(2+1)%5 를 수행하겠죠. 3을 5로 나누면 몫은 0이고 나머지는 3이므로 i에 3을 설정하는 결과를 가져옵니다.
만약 i가 3이고 max_elem이 5일 때 i=(3+1)%5 를 수행하겠죠. 4를 5로 나누면 몫은 0이고 나머지는 4이므로 i에 4를 설정하는 결과를 가져옵니다.
만약 i가 4이고 max_elem이 5일 때 i=(4+1)%5 를 수행하겠죠. 5를 5로 나누면 몫은 1이고 나머지는 0이므로 i에 0을 설정하는 결과를 가져옵니다.
따라서 i = (i+1)%max_elem 구문을 반복해서 사용하면 i값은 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, ... 순으로 0에서 4사이의 5개의 값 사이에서 순환합니다.
fmt.Println("i:", i)
i = (i + 1) % max_elem
fmt.Println("i:", i)
i = (i + 1) % max_elem
fmt.Println("i:", i)
i = (i + 1) % max_elem
fmt.Println("i:", i)
i = (i + 1) % max_elem
fmt.Println("i:", i)
i = (i + 1) % max_elem
fmt.Println("i:", i)
i = (i + 1) % max_elem
fmt.Println("i:", i)
[그림 2] 변수의 값을 특정 범위에서 순환하게 하는 예제 실행 화면
관련 게시글
[구글 Go 하자] 16. 직관적인 사칙 연산과 비교해 보세요.
[구글 Go 하자] 18. 자신의 값을 1 증가하거나 감소시키는 증감 연산자
[구글 Go 하자] 19. Go언어에서는 비교 연산자를 사용하는 곳이 많아요.
[구글 Go 하자] 20. Go언어의 논리 연산의 피연산자는 bool 형식만 올 수 있어요.
[구글 Go 하자] 21. 비트 단위로 연산하는 비트 연산자
'언어 자료구조 알고리즘 > 구글 Go' 카테고리의 다른 글
[구글 Go 하자] 22. 쉬프트 연산은 비트 단위로 자리를 이동합니다. (0) | 2016.06.01 |
---|---|
[구글 Go 하자] 21. 비트 단위로 연산하는 비트 연산자 (0) | 2016.06.01 |
[구글 Go 하자] 20. Go언어의 논리 연산의 피연산자는 bool 형식만 올 수 있어요. (0) | 2016.06.01 |
[구글 Go 하자] 19. Go언어에서는 비교 연산자를 사용하는 곳이 많아요. (0) | 2016.05.30 |
[구글 Go 하자] 18. 자신의 값을 1 증가하거나 감소시키는 증감 연산자 (0) | 2016.05.30 |
[구글 Go 하자] 16. 직관적인 사칙 연산과 비교해 보세요. (0) | 2016.05.30 |
[구글 Go 하자] 15. 부호 연산자도 연산자 (0) | 2016.05.30 |
[구글 Go 하자] 14. Go 언어 연산자 개요 (0) | 2016.05.30 |
[구글 Go 하자] 13. iota를 사용하여 규칙적인 상수 열거하기 (0) | 2016.05.28 |
[구글 Go 하자] 12. const 키워드로 상수 정의 (0) | 2016.05.28 |