【问题标题】:error: invalid operands to binary expression 'float' [duplicate]错误:二进制表达式'float'的无效操作数[重复]
【发布时间】:2016-11-08 16:15:37
【问题描述】:

如果之前有人问过这个问题,您好,很抱歉,但我正在研究约瑟夫斯问题,这是我编写的代码。

#include<stdio.h>
#include<cs50.h>
#include<math.h>

int main(void)

{
    printf("Number of people: ");
    float f=GetFloat();
    const int a=pow(2,floor(log(f)/log(2)));
    float c= 2*(f-2^a)+1;
    printf("%f\n", c);

}

当我尝试编译它时,它给了我这个错误信息。

clang -ggdb3 -O0 -std=c99 -Wall -Werror    Josephus.c  -lcs50 -lm -o Josephus
Josephus.c:11:20: error: invalid operands to binary
      expression ('float' and 'float')
    float c= 2*(f-2^a)+1;
                ~~~^~

我试图在代码中编写的等式是 c = 2(f – 2^a) + 1 其中“c”是我要查找的数字,“f”是人数,“a”是小于 f 的 2 的最大幂。

对于任何和所有语法错误以及我对该主题缺乏了解,我很抱歉,我是编程新手。干杯!

【问题讨论】:

标签: c++ constants cs50 operation


【解决方案1】:

您的问题是f-2^a。您可能希望这会从f 中减去a 的幂。麻烦的是^是XOR运算符,它的优先级低于减法。编译器将其视为(f-2) xor a。 xor 的 LHS 是浮点数,因此 a 被提升为浮点数...并且 xor 不适用于浮点数!

解决方法是:

f - pow(2.0, a)

或:

f - (1u << a)

(但只有在您确信a 在范围内时才使用后者。

【讨论】:

  • 这真的很有帮助,最后我改变了一些东西,它有效并给出了问题的实际答案!
猜你喜欢
  • 2016-09-24
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
相关资源
最近更新 更多