본문 바로가기
프로그래밍/C언어.

[C언어] % 연산자. mod 연산자. 예제소스&그림

by K_Coder 2012. 2. 26.

[C언어] % 연산자. mod 연산자. 예제소스&그림
[C언어] % 연산자. mod 연산자. 예제소스&그림
[C언어] % 연산자. mod 연산자. 예제소스&그림



다룰 내용

나누기의 기본적인 방식

반드시 알아야 하는 나누기의 주의사항.
 
정상적인 나누기를 하기 위한 2가지 방법.

% 연산자를 알아보자.

주로 사용되는 %의 2가지 방법.



나머지 연산. 이라고 하며 % 또는 mod (모드) 연산자 라고도 한다.

%연산자를 배우기 전 일단 나누어서 결과를 취하는 경우는 3가지가 있다. 

1. 나누어서 몫과 나머지를 구하는 방법.
2. 나누어서 몫만 구하는 방법.
3 .나누어서 나머지만 구하는 방법.



꼭 알아야 하는 나누기의 주의사항을 알아보자. 

처음 또는, 오랜만에 접하는 사람들이 범하는 실수인데
바로 정수를 정수로 나누는 것이다.  ( 3 / 2 )
3/2 우리는 사람이라 별 이상한 점을 느끼지 못한다.

하지만 컴퓨터는 1 이라는 값을 알려준다. 
정수를 정수로 나누는 경우에는 정수의 값이 나온다.
 
즉, 소수점은 나오지 않는 것이다.




보여주기 위해서 정수 나누기도 정수의 결과 값을 저장하는
i_result 도float로 선언했지만 int로 잡으면 마찬가지로 1 이 나온다.

행여나 테스트 해본다며 작성하다가 f_result 마저 int로 잡는 실수는 하지 말자.
1.500000 라는 값이 정상적으로 나왔지만, int 라는 기억 공간에 들어가면서
.500000 이 짤리고 1 만 들어가버린다.




정상적인 나누기를 하기 위한 방법이 2가지가 있다.
 

이 중 한가지를 반드시 사용해야 정상적인 값이 나온다.

3 / 2.0   상수인 경우 뒤에 .0을 붙여서 실수화 시켜준다.
3 / (float) 2   두 숫자 중 한 곳에 (float)로 명시적 형 변환을 시켜준다.

위쪽 방법은 주로 상수. 둘 수 중 하나라도 상수인 경우 편하게 .0을 붙여서 실수화 시킨며

아래쪽 방법은 변수라서  .0을 붙일 수 없으므로
(float) , (double) 같은 실수를 표현 할 수 있는 자료형을 형 변환 시킨다.

이렇듯 나누기는 소수점.
 즉, 실수가 나오기 때문에 받아주는 변수가 반드시 실수를 표현할 수 있어야한다.
int를 사용해선 안된다. 정상적인 방법으로 나누었다 하더라도 표현할 때 소수 부분이 짤린다.




이제. % 연산자에 대해 알아보자.

% 연산자란 나머지를 구한다고 했었다.  아래 예제를 보자.




여기서 보이다 싶이. 나머지의 특성상 자기와 같은 값은 나올 수가 없다.

0 부터 자기보다 작은 값이 계속 반복된다.

나머지가 자기 자신과 같아 진다는 것은 그 수로 한번 더 나눌 수 있다는 것을 의미하며
당연히 한번 더 나누게 되면 나머지는 0으로 된다.




내가 본 주된 용도는 2가지 였다.

1. 배수 구하기.
2. 랜덤 함수 범위 지정하기. (자기보다 작은 값 나오게 하기.)


1번 나머지 연산을 해서 0이 나온다는 것은?

그 수로 딱 나누어 떨어진다는 의미로 그 수의 배수라는 의미이다.
위에서 보다 싶이. 3과 6에서 나머지는 0이 나왔다.


2번. 랜덤 함수의 범위 지정하기.
아직 랜덤 함수를 써보지 못해서 모를 수도 이겠지만, 개념만 이해하자.
랜덤의 경우 0부터 랜덤수를 발생하는데 몇 천의 수도 나오고 한다.

하지만, 내가 원하는 랜덤수는 그렇게 클 필요가 없다. 0에서 9정도면 적당한데... 이럴 때 !

랜덤수에 % 10을 해주자. 어떤 결과를 예상하는가? 그 수가 몇이던 10으로 나누고 나머지를 취하는 이상
나머지는 10 보다 작을 수 밖에 없다.0 ~ 9 사이의 숫자가 되는 셈이다.

뭐, 5~7 을 구한다거나 할 수도 있는데. 랜덤함수 작성시에 포스팅 하고
이쪽에도 링크를 걸도록 해야겠다.

무튼, 이 두가지 정도면 이해한다면 %연산자에 대해 충분히 이해 했다고 생각한다.