我一直在尝试使用此代码:
if (iteration % pow(256.0, 7) == 0) {
在我的一个程序中,但错误控制台显示:
错误 C2297:“%”:非法,右操作数的类型为“double”
我怎样才能绕过这个错误?
正如您在标题中所述,答案是将结果转换为整数:
if (iteration % static_cast<int>(pow(256.0, 7)) == 0)
由于pow(256.0, 7)
可以表示为整数,因此您可能应该将其定义为适当的 const,例如
const int64_t pow_256_7 = 1LL << (8 * 7); // 256^7
然后像这样进行测试:
if ((iteration % pow_256_7) == 0)
iteration % pow(256.0, 7)
这里pow
返回double
。但%
不能应用于double
(或float
)类型。
%
只能应用于整数类型,例如int
, short
,char
等。
我怎样才能绕过这个错误?
你想达到什么目的?也许你可以这样做:
iteration % static_cast<__int64>(pow(256.0, 7))
或者简单地说:
const __int64 value = 256ULL * 256 *256 *256 *256 *256 *256;
if ( iteration % value == 0 )