본문 바로가기

프로그래밍./C언어.

[C언어] %연산자, Mod 연산자란? 간단 예제.

[C언어] %연산자, Mod 연산자란? 간단 예제.
나머지 연산. 이라고 하며 % 또는 mod (모드) 연산자 라고도 한다.

%연산자를 배우기 전에 꼭 알아야 하는 나누기의 주의사항을 알아보자.

프로그래밍에서 나누기를 하는 방법은 3가지가 있다. 언어마다 다르긴 하지만.

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

비쥬얼 베이직에서는 위 3가지 방법이 모두 존재 하는데.
다른 언어에서 몫만 구하는 연산자가 있는지 확실히 모르겠다.
물론, 일부러 정수로 나누어서 소수점을 떼어버릴 수도 있긴 하다.


일반적인 나누기에서도 주의할 점이 있다. 처음 접하거나, 오랜만에 접하는 사람들이
자주 범하는 실수로 대상 값을 정수로 나누는 것이다.
3/2 우리는 사람이라 별 이상한 점을 느끼지 못한다.

하지만 컴퓨터는 1 이라는 값을 알려준다. 정수로 나누는 경우 정수의 값이 나온다.
정수라는 단위로 나누었기 때문에 그 보다 자세한 실수. 즉 소수점은 나오지 않는 것이다.




보여주기 위해서 정수 나누기도 float로 선언했지만 int로 잡아도 마찬가지로 1 이 나온다.


정상적인 나누기를 하기 위한 방법이 2가지가 있다.
이 중 한가지는 반드시 사용해야 정상적인 값이 나온다.

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

1번의 경우 주로 상수. 둘 수 중 하나라도 상수인 경우 편하게 .0을 붙여서 실수화 시킨며
2번의 경우는 변수인 경우. .0을 붙일 수 없다. (float) , (double) 실수를 표현 할 수 있는 자료형을 형 변환 시킨다.

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



이제. % 연산자에 대해 알아보자. % 연산자란 나머지를 구한다고 했었다.
우선 아래 결과를 먼저 보자.


여기서 보이다 싶이. 나머지의 특성상 자기와 같은 값은 나올 수가 없다.
0 부터 자기보다 작은 값이 계속 반복된다. 나머지가 자기 자신과 같아 진다는 것은
그 수로 한번 더 나눌 수 있다는 것을 의미하며. 당연히 한번 더 나누게 되면 나머지는 0으로 된다.


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

1. 배수 구하기.

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


1번 나머지 연산을 해서 0이 나온다는 것은? 그 수로 딱 나누어 떨어진다는 의미로
즉, 그 수의 배수라는 이야기 이다. 위에서 보다 싶이. 3과 6에서 나머지는 0이 나왔다.


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

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

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

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

랜덤 함수에 대해 알고 싶다면 아래 링크를 참고 하자.
[C언어] 랜덤함수 사용법. rand(), srand() 간단예제.



유용한 정보가 되셨다면 아래 손가락 버튼 한번 눌러주세요 ^-^