C++ 错误:二进制表达式';的操作数无效;浮动';

C++ 错误:二进制表达式';的操作数无效;浮动';,c++,constants,cs50,operation,C++,Constants,Cs50,Operation,您好,如果以前有人问过这个问题,我很抱歉,但我正在研究约瑟夫问题,这是我编写的代码 #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*(

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

#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);

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


很抱歉,我犯了所有语法错误,而且我对这个主题缺乏知识,我是编程新手。干杯

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

解决方案是:

f - pow(2.0, a)
或:


f-(1u相关/被愚弄,这真的很有帮助,最后我改变了一些事情,它起作用了,并给出了问题的实际答案!
f - pow(2.0, a)
f - (1u << a)