Warum funktioniert mein Power-Operator (^) nicht?

Lesezeit: 6 Minuten

Warum funktioniert mein Power Operator ^ nicht
Abid Ali

#include <stdio.h>

void main(void)
{
    int a;
    int result;
    int sum = 0;
    printf("Enter a number: ");
    scanf("%d", &a);
    for( int i = 1; i <= 4; i++ )
    {
        result = a ^ i;

        sum += result;
    }
    printf("%d\n", sum);
}

Warum ist ^ funktioniert nicht als Netzbetreiber?

  • Funktioniert gut für mich, nachdem ich den Rückgabewert von main() durch “int” ersetzt habe. Ich hatte aber nicht erwartet, dass es funktioniert, da <stdio.h> und <math.h> werden normalerweise anstelle von verwendet "stdio.h" und "math.h". Aber es sieht so aus, als ob GCC sich nicht wirklich darum kümmert.

    – Sergei Tachenov

    30. Januar 2011 um 14:18 Uhr

  • @Abid Es ist oft gut, Fragen zu bearbeiten, aber in diesem Fall haben die Bearbeitungen die Frage bedeutungslos gemacht (Sie haben das Problem durch die Lösung ersetzt). Es ist besser, die ursprünglichen Fragen zu belassen, damit andere lernen können – aber es ist jetzt nur noch verwirrend (Es gibt kein “^” in der Frage). Schlagen Sie vor, dass Sie zur letzten Änderung zurückkehren, die als Frage sinnvoll ist

    – peter.murray.rust

    30. Januar 2011 um 14:25 Uhr

  • Zurück zu verwenden geändert ^ da die Frage (und die Antworten) sonst wenig Sinn machen. Da peoro Ihre Frage richtig beantwortet hat, sollten Sie sie akzeptieren und fortfahren. Wenn Sie haben Ein weiterer Frage, dann stellen Sie bitte eine andere Frage. Bearbeiten Sie dieses nicht, um die ganze Arbeit bedeutungslos zu machen.

    – paxdiablo

    30. Januar 2011 um 14:30 Uhr


  • @Sergey Tachenov: Oh, ich sehe jetzt, dass Sie pow() verwendet haben? Ich dachte, Sie hätten den Originalcode des OP (mit ^ für pow) zum Laufen gebracht.

    – Oystein

    30. Januar 2011 um 15:04 Uhr

  • void main ??? Äh…

    – PaulR

    30. Januar 2011 um 16:00 Uhr

1647167413 595 Warum funktioniert mein Power Operator ^ nicht
Sergei Tachenov

Nun, zuerst einmal die ^ Operator in C/C++ ist das bitweise XOR. Mit Befugnissen hat das nichts zu tun.

Nun zu Ihrem Problem mit der Verwendung der pow() Funktion, etwas googeln zeigt, dass es hilft, eines der Argumente zu verdoppeln:

result = (int) pow((double) a,i);

Beachten Sie, dass ich das Ergebnis auch in umgewandelt habe int wie alle pow() Überladungen geben doppelt zurück, nicht int. Ich habe keinen MS-Compiler zur Verfügung, daher konnte ich den obigen Code nicht überprüfen.

Seit C99, es gibt auch float und long double Funktionen aufgerufen powf und powl bzwfalls das etwas hilft.

Warum funktioniert mein Power Operator ^ nicht
Junge

In C ^ ist das bitweise XOR:

0101 ^ 1100 = 1001 // in binary

Es gibt keinen Operator für die Stromversorgung, den Sie verwenden müssen pow Funktion aus math.h (oder einer anderen ähnlichen Funktion):

result = pow( a, i );

  • Ich habe diese Funktion verwendet.

    – Abid Ali

    30. Januar 2011 um 14:05 Uhr

  • @Abid Ali: Sie müssen math.h einschließen. Setzen Sie diese Zeile an den Anfang Ihrer Datei: #include <math.h>

    – Junge

    30. Januar 2011 um 14:09 Uhr

  • @Abid Ali: die Programm Sie verwenden, um Ihren C-Code zu schreiben und zu kompilieren, folgt nicht dem Standard von C: Es kann keinen gültigen C-Code kompilieren. Weiß nicht warum. Ich würde Ihnen empfehlen, auf einen standardkonformeren Compiler umzusteigen. Wenn Sie Windows verwenden, versuchen Sie, Ihre Programme (zum Beispiel) in Dev-C++ herunterzuladen und zu schreiben, das GCC als Compiler verwendet. Kann Ihnen nicht helfen, herauszufinden, warum dieser Code nicht mit Microsoft Studio funktioniert.

    – Junge

    30. Januar 2011 um 14:31 Uhr

  • @peoro, überladene Makros? Makros werden nicht eingegeben, sie akzeptieren alles. Und C kann unmöglich überladene Funktionen haben, da es keine Namensverstümmelung gibt. In Bezug auf den Fehler zeigt einiges Googeln, dass eine Problemumgehung darin besteht, eines der Argumente in Double Like umzuwandeln (int) pow((double) a,i) – Ich habe das Ergebnis auch gecastet, da es double zurückgibt, nicht int.

    – Sergei Tachenov

    30. Januar 2011 um 14:33 Uhr

  • @Abid Ali: versuche diese Zeile durch diese zu ersetzen: pow( (double)a, (double)i );

    – Junge

    30. Januar 2011 um 14:37 Uhr

pow() funktioniert nicht mit intdaher der Fehler “error C2668:’pow’: mehrdeutiger Aufruf einer überladenen Funktion”

http://www.cplusplus.com/reference/clibrary/cmath/pow/

Schreiben Sie Ihre eigene Potenzfunktion für intS:

int power(int base, int exp)
{
    int result = 1;
    while(exp) { result *= base; exp--; }
    return result;
}

  • ints sollten automatisch zu befördert werden doubles, sollten sie nicht? Ihr Link handelt sowieso von C++.

    – Junge

    30. Januar 2011 um 14:32 Uhr


  • Da diese Funktion Floats und Doubles akzeptiert, weiß sie beim Aufrufen mit ints nicht, in welchen Typ sie ints umwandeln soll.

    – max

    30. Januar 2011 um 14:34 Uhr

  • “Ihr Link handelt sowieso von C++.” Aber der Poster verwendet den C++-Compiler, da er wegen Überladung einen Fehler hat.

    – max

    30. Januar 2011 um 14:35 Uhr


  • Dies ist in mehrfacher Hinsicht suboptimal. Zuerst werden Sie die Schleife so oft ausführen, wie in exp angegeben. Je nach Größe von int kann das ziemlich viel sein. Der größte sinnvolle Exponent ist jedoch pow(2, sizeof(int)*CHAR_BIT-1). Aber es gibt noch Raum für Verbesserungen. pow(x, y) == pow(2, n) * pow(x’, r). Der Term pow(2,n) kann durch einfache Bitverschiebung um n implementiert werden. Das Bestimmen von x’ und r kann schneller sein als das Iterieren dieser Schleife.

    – Datenwolf

    30. Januar 2011 um 15:08 Uhr

  • Ich habe die einfachste Implementierung als Beispiel gegeben, wie sie in Algorithmen-Lehrbüchern gezeigt wird.

    – max

    30. Januar 2011 um 15:12 Uhr

1647167414 379 Warum funktioniert mein Power Operator ^ nicht
Pankaj Prakash

Als allererstes ^ ist ein Bitweiser XOR-Operator nicht Netzbetreiber.

Sie können andere Dinge verwenden, um die Macht einer beliebigen Zahl zu finden. Sie können verwenden for-Schleife, um die Potenz einer beliebigen Zahl zu finden

Hier ist ein Programm, um x^y dh x zu findenj

double i, x, y, pow;

x = 2;
y = 5; 
pow = 1;
for(i=1; i<=y; i++)
{
    pow = pow * x;
}

printf("2^5 = %lf", pow);

Sie können auch einfach verwenden pow() Funktion, um die Potenz einer beliebigen Zahl zu finden

double power, x, y;
x = 2;
y = 5;
power = pow(x, y); /* include math.h header file */

printf("2^5 = %lf", power);

Es funktioniert nicht, weil sowohl c als auch c++ keine Operatoren haben, um Power-Operationen durchzuführen.

Was Sie tun können, ist, Sie können die Bibliothek math.h und die Funktion pow verwenden.

`   #include<stdio.h>
    #include<math.h>
    int main(){
        int base = 3;
        int power = 5;
        pow(double(base), double(power));
        return 0;
     }`

1647167416 49 Warum funktioniert mein Power Operator ^ nicht
Nick Anderegg

Sie müssen tatsächlich pow(number, power); verwenden. Leider funktionieren Karat nicht als Machtzeichen in C. Wenn Sie feststellen, dass Sie etwas in einer anderen Sprache nicht tun können, liegt das oft daran, dass es eine andere Funktion gibt, die dies für Sie erledigt.

1647167416 922 Warum funktioniert mein Power Operator ^ nicht
anup

math.h einbinden und mit gcc test.c -lm kompilieren

  • Ich fürchte, OP verwendet GCC nicht. :-(

    – Junge

    30. Januar 2011 um 14:15 Uhr

  • @Abid: Welchen Compiler verwendest du?

    – anup

    30. Januar 2011 um 14:19 Uhr

  • @peoro, das Lustige ist, dass es in GCC gut funktioniert. Es schlägt mich, warum es nicht mit MS-Compiler funktioniert.

    – Sergei Tachenov

    30. Januar 2011 um 14:21 Uhr

  • @Sergey Tachenov: stimme dir zu: lies meinen letzten Kommentar zu meiner Antwort.

    – Junge

    30. Januar 2011 um 14:23 Uhr

  • Ich verwende MICROSOFT VISUAL STUDIO 2008

    – Abid Ali

    30. Januar 2011 um 14:38 Uhr

997210cookie-checkWarum funktioniert mein Power-Operator (^) nicht?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy