在C语言的运算符体系中,有一类运算符明确要求参与运算的操作数必须是整数类型,这类运算符主要包括求模运算符%和整除运算符/在整数运算场景下的使用规则,下面我们逐一展开说明。
一、求模运算符%
求模运算符%也叫取余运算符,它的作用是计算两个整数相除后的余数,C语言标准明确规定,%的两个操作数都必须是整数类型,包括int、short、long、char等整数类型,不能是浮点数类型。
如果给%传入浮点数操作数,编译器会直接报错,例如下面的代码:
#include <stdio.h>
int main() {
int a = 10;
int b = 3;
// 正确用法,两个操作数都是整数
int result1 = a % b;
printf("10 %% 3 = %dn", result1); // 输出结果 1
double c = 10.5;
// 错误用法,操作数包含浮点数,编译会报错
// int result2 = c % b;
return 0;
}
求模运算的结果符号与被除数的符号一致,例如-10 % 3的结果是-1,10 % -3的结果是1。
二、整除运算符/的整数运算规则
除法运算符/的使用规则和操作数类型相关:当两个操作数都是整数时,执行的是整除运算,结果会自动舍弃小数部分,只保留整数部分,此时也要求操作数是整数。
如果其中一个操作数是浮点数,那么会执行浮点数除法,结果会保留小数部分,此时就不再要求操作数必须是整数。示例如下:
#include <stdio.h>
int main() {
int a = 10;
int b = 3;
// 两个整数相除,执行整除,结果为3
int result1 = a / b;
printf("10 / 3 = %dn", result1);
double c = 3.0;
// 一个操作数是浮点数,执行浮点数除法,结果为3.333333
double result2 = a / c;
printf("10 / 3.0 = %fn", result2);
return 0;
}
三、常见误区说明
很多初学者会误以为/运算符始终要求操作数是整数,实际上只有当两个操作数都是整数时,才需要满足整数要求,只要有一个操作数是浮点数,就可以正常进行浮点数除法。
另外,如果参与整数运算的操作数类型不一致,比如short和int相加,C语言会先执行整型提升,把低精度的整数类型转换为高精度的整数类型,再进行运算,这个过程中不会引入浮点数,所以依然符合整数运算符的要求。
四、总结
总结来说,C语言中明确要求参加运算的数必须是整数的运算符是求模运算符%,而除法运算符/仅在两个操作数都是整数时执行整除运算,此时也要求操作数为整数。在实际编程中,使用%时要确保两个操作数都是整数类型,使用/时要根据需求选择操作数类型,避免因为类型错误导致编译失败或者运算结果不符合预期。