web-dev-qa-db-fra.com

Comment élever au pouvoir de

Je suis très nouveau à c

J'essaie de mettre quelque chose au pouvoir de quelque chose

par exemple. 5 ^ 3 = 125;

mais quand je code

#include <math.h>
...

printf("%d", 5^3);

J'obtiens 6. Est-ce que je fais quelque chose de fondamentalement faux?

8
user3139744

^ est l'opérateur au niveau du bit XOR en C.

5 est 101 en représentation binaire et 3 est 011. Donc, 101 XOR 011 = 110, qui est 6 en décimal.

Ce que vous voulez, c'est pow(5,3) (qui est disponible après avoir inclus math.h comme vous l'avez fait). Notez cependant que cela agit sur les doubles et non sur les entiers, votre valeur de retour sera donc une virgule flottante et en général pas exacte. Si vous avez besoin d'une exponentiation entière exacte, vous devez utiliser une bibliothèque supplémentaire ou implémenter votre propre fonction power. Ce n'est pas si difficile, pour un algorithme voir exponentiation en quadrillant . La norme C n'inclut pas de fonction pour l'exponentiation entière. Quoi qu'il en soit, avec une exponentiation entière, il est important de prendre en charge les débordements , ce qui peut déjà se produire pour de petites valeurs d'entrée.

De plus, pour imprimer le double renvoyé, vous devez soit convertir le double en un __ intprintf("%d", (int)pow(5,3)), soit en l’imprimant en tant que virgule flottante printf("%f", pow(5,3))

16
Nabla

^ est un opérateur XOR en C.

Au lieu de cela, vous devez utiliser la fonction pow de math.h, cependant pow renvoie le double

#include <math.h>
...

printf("%d", (int)pow(5, 3));
3
pkacprzak

Vous devriez utiliser pow(5,3).

Vous utilisez l'opérateur XOR (^) au niveau du bit: en binaire, c'est 101 ^ 011, qui est 110 ou 6 (votre réponse actuelle) en denary.

2
splrs

Il y a pas d'opérateur pour l'exponentiation (puissance) en C. ^ est utilisé est un opérateur XOR au niveau du bit en langage C. Faire 5^3 retournera 6, pas 125. Pour l’exponentiation, vous pouvez utiliser la fonction de bibliothèque standard pow.
Signature: 

double pow(double x, double y);  

Entête: 

#include <math.h>  

Changement 

printf("%d", 5^3);  

à

printf("%d",(int)pow(5,3));  

En C++, n'utilisez pas <math.h>. Au lieu de cela, vous pouvez utiliser <cmath>.

2
haccks

D'autres ont déjà recommandé l'utilisation de la fonction pow à partir de math.h car ^ n'est pas l'opérateur approprié pour effectuer l'alimentation de. Sinon, vous pouvez également écrire votre propre fonction de puissance juste pour le plaisir.

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

Intérieur principal:

printf("%d\n", power(5,3));

Dans ce cas, vous n'avez pas besoin d'utiliser l'opérateur de distribution, car pow() ne fonctionne pas avec int.

0
Yick Leung