2016-11-08 3 views
-2

Hallo und tut mir leid, wenn diese Frage schon einmal gestellt wurde, aber ich arbeite an dem Josephus-Problem und das ist der Code, den ich geschrieben habe.Fehler: ungültige Operanden zu binären Ausdruck 'float'

Wenn ich versuche es zu kompilieren gibt es mir diese Fehlermeldung.

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; 
       ~~~^~ 

Die Gleichung I in dem Code zu schreiben, bin versucht c = 2 (f - 2^a) + 1 Wo "c" ist die Nummer ich suche, "f" ist die Anzahl der Personen und "a" ist die Großmacht von 2 kleiner als f.

Sorry für alle grammatikalischen Fehler und meine Unkenntnis des Themas, ich bin neu in der Programmierung. Prost!

+1

verwandt/Betrogene von http: //stackoverflow.com/questions/4843304/why-is-my-power-operator-not-working und http://stackoverflow.com/questions/845912/what-is-the-c-function-to-raise- a-number-to-a-power – NathanOliver

Antwort

0

Ihr Problem ist f-2^a. Sie erwarten wahrscheinlich, dass dies zwei von der a von f abgezogen wird. Problem ist ^ ist der XOR-Operator, und es ist niedrigere Priorität als Subtraktion. Der Compiler behandelt dies als (f-2) xor a. Die LHS des Xors ist float, also wird das a zum float befördert ... und xor funktioniert nicht mit floats!

Das Update ist entweder:

f - pow(2.0, a) 

oder:.

f - (1u << a) 

(aber nur die letztere, wenn Sie sicher sind, dass a in Reichweite ist

+0

Das hat wirklich geholfen, ich Am Ende habe ich ein paar Dinge geändert, es funktioniert und gibt die tatsächliche Antwort auf das Problem! – carlos1106

Verwandte Themen