IT/C C++ Show [C/C++] 정수, 실수 나머지 구하기Half Mooon 2022. 5. 20. 10:41 [C/C++] 정수, 실수 나머지 구하기1. 정수 나머지 구하기→ a % b (a 나누기 b의 나머지를 계산) 예)
2. 실수 나머지 구하기필요 헤더파일 : <math.h> → double 자료형 : fmod(x, y) → long double 자료형 : fmodl(x, y) 자료형 차이는 아래 글 참고 [C/C++] 자료형의 크기 및 표현 범위 예)
ET의 공부/C언어 [C언어] 몫과 나머지룰 계산하는 프로그램이티의 골방 2020. 12. 12. 21:34 몫과 나머지룰 계산하는 프로그램입니다.
몫은 나누기 연산자(/)로 계산을 하고 quotient = dividend / divisor; 나머지는 모듈로 연산자(%)로 계산을 합니다. remainder = dividend % divisor; 정보처리기사/실기 [C언어] 몫과 나머지 구하기. 정수를 실수로 형변환 하기.7$ 2020. 2. 8. 18:04
실행 결과 우리가 통상 사용하고 있는 나머지 연산자 (%) 에 대한 짧은 이야기를 해 보겠다. 나머지 연산자는 얼핏 보면 나눗셈 연산자 (/) 와 더불어 정수의 몫과 나머지를 구하는 [예 1] 5 / 2 [예 1]의 답은 당연히 2 이다. 정수에서는 소수점 이하는 버리기 때문이다. 또한 [예 2], [예 3] [예 4] 의 답도 각각 2, -2, -2 이다. (초등학교때 배웠던 양수와 음수의 곱셈과 나눗셈 법칙과 같다.) 그렇다면 다음의 예는 어떨까? [예 5] 5 % 2 [예 7] 5 % -2 [예 8] -5 % 2 실제로 결과를 보면 알겠지만 결과는 각각 1, -1, 1, -1 로 계산되어 나온다. 이렇게 나오는 이유를 설명하겠다. C 언어의 % 연산자에서 음수 처리는 다음과 같이 정의되어 있다. X % Y 를 연산할 때 그 연산 결과의 부호는 X 의 부호를 따라간다. 즉 Y의 부호는 무시되며 오직 X가 양수이면 결과는 양수, 음수이면 결과는 음수가 된다. 쉽게 말하면 [예 5] ~ [예 8]의 결과는, 일단 부호가 모두 양수라 가정하고 계산을 한 후 앞의 수의 부호를 붙인다는 뜻이다. 여기서 한 가지 고찰을 해 보자. 얼핏 보기에 저렇게 정의되는 나머지 연산이 별 것 아니라 느껴지겠지만, 우리가 나머지 연산을 사용하여 구현하는 것 중 일정 주기의 offset 을 구하는 등의 다음과 같은 경우가 있을 수 있겠다. 예를 들어 앞의 수가 차례로 증가 혹은 감소할 때마다 0, 1, 2, 3 의 번호를 주기적으로 부여하는 경우이다. 즉 ... int i; for( i=100; i>0; i-- ) { printf("번호 %d 는 %d 조 입니다.\n", i, i%4); } ... 기대하는 것은 0, 3, 2, 1, 0, 3, 2, 1, 0, 3, 2, 1, 0, ... 식으로 주기적으로 조를 정해주는 것인데, 만일 i 가 0보다 작은 음수로 들어가게 되면, 즉 ... int i; for( i=50; i>=-50; i-- ) { printf("번호 %d 는 %d 조 입니다.\n", i, i%4); } ... 이런 경우에는 양수에서 음수로 바뀌는 부분에서 기대하는 것 처럼 조를 정해주지 않는다. 즉, 결과가 다음과 같이 나오게 된다. ... 3, 2, 1, 0, 3, 2, 1, 0, -1, -2, -3, 0, -1, -2, -3 ... 이런 경우는, 결과가 음수일 경우 4를 더하는 등의 방법 등으로써 해결하는 구문이 추가로 요구된다. ^^ 즉, 요점은 이렇다. 연산자 자체의 기능만을 설명한 것을 본다면 어렵지 않고 별로 중요하지 않은 것처럼 보이지만, 실제로 이를 응용하여 실전에서 사용하게 될 경우에는 자신도 몰랐던 예상치 못한 결과가 나올 수도 있다는 것을 항상 염두해야 한다는 것이다. 이것이 올바르고 효과적인 디버깅 자세의 시작이 아닐까 한다. ----------------------- 또하나 (중요한 이야기를) 추가하면... 나머지 연산은 실수형에선 동작하지 않는다는 것이다. 즉 5 % 2 의 값은 1 로 제대로 나오지만 5.0 % 2.0 등은 컴파일이 되지 않는다는 것을 추가로 알아두자. |