错误:二进制表达式的操作数无效'float'
error: invalid operands to binary expression 'float'
你好,很抱歉,如果这个问题之前已经问过了,但我正在研究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
在范围内时才使用后者)
相关文章:
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 无法访问嵌套类.类的使用无效
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- FFMPEG配置文件级别id大小无效
- 错误:从"int"到枚举c++的转换无效
- 如何修复此错误:className::className的无效使用
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 数组下标的类型"float*[float]"无效
- 错误:二进制'operator*' 'float'和'float[0]'类型的操作数无效
- "错误:数组下标的无效类型'float [10001][float]'是什么意思?
- 在 C++ 中从 'const float*' 到 'float*' 的转换无效
- 错误:二进制表达式('float' 和 'float')返回的无效操作数 (x & (1 << 31)) == 0
- 错误:二进制'operator*' 'int [1]'和'float'类型的操作数无效
- 此背包代码显示浮点[float]无效类型错误.可能是什么原因
- 错误:C++ 中二进制"operator%"类型"float"和"int"的操作数无效
- 错误:二进制'operator^' 'float'和'int'类型的操作数无效
- 数组下标'int [5][float]'的类型无效
- 错误:二进制表达式的操作数无效'float'