错误:二进制表达式'float'的操作数无效

时间:2016-11-08 16:15:37

标签: c++ constants cs50 operation

对不起,如果之前已经问过这个问题,我很抱歉,但我正在处理Josephus问题,这是我写的代码。

#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”是2的小于f的幂。

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

1 个答案:

答案 0 :(得分:0)

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

修复是:

f - pow(2.0, a)

或:

f - (1u << a)

(但如果您确信a在范围内,则仅使用后者。