类型的无效操作数int和double二进制“操作符%”
问题描述:
编译我收到以下错误类型的无效操作数int和double二进制“操作符%”
invalid operands of types int and double to binary 'operator%' at line
"newnum1 = two % (double)10.0;"
程序后,为什么会这样呢?
#include<iostream>
#include<math>
using namespace std;
int main()
{
int num;
double two = 1;
double newnum, newnum1;
newnum = newnum1 = 0;
for(num = 1; num <= 50; num++)
{
two = two * 2;
}
newnum1 = two % (double)10.0;
newnum = newnum + newnum1;
cout << two << "\n";
return 0;
}
答
因为%
只定义为整数类型。这就是模数运算符。
标准的5.6.2:
的操作数*和/应有算术或枚举类型; %的操作数应具有整数或枚举类型。 [...]
正如Oli指出的那样,您可以使用fmod()
。不要忘记包括math.h
。
+0
用法:包含'math.h',然后使用'fmod(15,2);'。更多内容参见['fmod'文档](http://www.cplusplus.com/reference/cmath/fmod/)。 – Matt 2014-03-20 23:32:10
答
因为%
只适用于整数类型。也许你想用fmod()
。
答
是的。 %运算符没有为double类型定义。按位运算符也是如此,如“&,^,|,〜,< <,>>”。
'(double)10.0'这个类型转换不做任何事情。 10.0已经是双重类型。 10.0f是浮点类型,10是(带符号)整数类型。 – Lundin 2012-02-14 14:33:40
@Lundin:'10'具体是'int'类型,而不是任何任意有符号整数类型。 – 2016-01-07 19:32:41