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

error: invalid operands to binary expression 'float'

本文关键字:float 无效 操作数 二进制 表达式 错误      更新时间:2023-10-16

你好,很抱歉,如果这个问题之前已经问过了,但我正在研究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("%fn", 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的最大次幂。

抱歉所有的语法错误和我缺乏知识的主题,我是新的编程。干杯!

您的问题是f-2^a。你可能期望它减去2的a次方从f。问题是^是异或运算符,它的优先级比减法低。编译器将此视为(f-2) xor a。xor的LHS是float,所以a被提升为float…xor不能处理浮点数!

修复方法是:

f - pow(2.0, a)

或:

f - (1u << a)

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