C 언어에서 나머지 연산자(%, 모듈로)에 음수가 포함되면 어떤 결과가 나오는지 알아보겠습니다. 아래 예제 프로그램과 실행 결과를 통해 그 동작 방식을 살펴봅시다.
예제 1: 연산자 우선순위와 함께 사용하기
#include<stdio.h>
int main() {
int a = 7, b = -10, c = 2;
printf("Result: %d", a % b / c);
}실행 결과
Result: 3
여기서 %와 /는 우선순위가 같기 때문에 왼쪽부터 순서대로 평가됩니다. 따라서 먼저 a % b(즉, 7 % -10)가 계산되어 7이 되고, 이후 c(2)로 나누면 최종 결과는 3이 됩니다.
중요한 점은 a % b 연산에서 결과의 부호가 왼쪽 피연산자(a)의 부호를 따른다는 것입니다. 좀 더 자세히 확인해 보겠습니다.
예제 2: 왼쪽 피연산자가 양수인 경우
#include<stdio.h>
int main() {
int a = 7, b = -10;
printf("Result: %d", a % b);
}실행 결과
Result: 7
왼쪽 피연산자 a가 양수이므로, 오른쪽 피연산자 b가 음수라 하더라도 결과는 양수 7입니다.
예제 3: 왼쪽 피연산자가 음수인 경우
이번에는 두 변수의 부호를 서로 바꿔 보겠습니다.
#include<stdio.h>
int main() {
int a = -7, b = 10;
printf("Result: %d", a % b);
}실행 결과
Result: -7
왼쪽 피연산자 a가 음수이므로 결과 역시 음수 -7이 됩니다.
예제 4: 두 피연산자 모두 음수인 경우
#include<stdio.h>
int main() {
int a = -7, b = -10;
printf("Result: %d", a % b);
}실행 결과
Result: -7
두 피연산자가 모두 음수인 경우에도 결과는 왼쪽 피연산자의 부호를 따르므로 음수입니다.
정리
C 언어(C99 표준 이후)에서 모듈로 연산의 결과 부호는 항상 왼쪽(첫 번째) 피연산자의 부호와 일치합니다. 즉, 나누는 수(b)의 부호는 결과에 영향을 주지 않으며, 나눠지는 수(a)가 양수면 결과도 양수, 음수면 결과도 음수가 됩니다. 이는 Python 등 다른 언어의 모듈로 동작 방식과 다를 수 있으므로, 음수 연산을 다룰 때 특히 주의해야 합니다.