0

我一直在尝试使用此代码:

if (iteration % pow(256.0, 7) == 0) {

在我的一个程序中,但错误控制台显示:

错误 C2297:“%”:非法,右操作数的类型为“double”

我怎样才能绕过这个错误?

4

3 回答 3

2

正如您在标题中所述,答案是将结果转换为整数:

if (iteration % static_cast<int>(pow(256.0, 7)) == 0) 
于 2012-08-25T15:46:38.473 回答
2

由于pow(256.0, 7)可以表示为整数,因此您可能应该将其定义为适当的 const,例如

const int64_t pow_256_7 = 1LL << (8 * 7);  // 256^7

然后像这样进行测试:

if ((iteration % pow_256_7) == 0)
于 2012-08-25T15:52:58.903 回答
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 ) 
于 2012-08-25T15:44:15.647 回答