2011-01-30 19 views
43
#include "stdio.h" 
#include "math.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 =sum+result; 
    } 
    printf("%d\n",sum); 
} 

No sé por qué este '^' no funciona como potencia.¿Por qué mi operador de energía (^) no funciona?

+0

funciona bien para mí después de reemplazar el valor de retorno de main() con "int". No esperaba que funcionara, ya que '' y '' se usan generalmente en lugar de '" stdio.h "' y '" math.h "'. Pero parece que a GCC realmente no le importa. –

+7

@Abid A menudo es bueno editar preguntas, pero en este caso las modificaciones han dejado la pregunta sin sentido (ha reemplazado el problema con la solución). Es mejor dejar las preguntas originales para que otros puedan aprender, pero ahora es simplemente confuso (no hay "^" en la pregunta). Te sugerimos que vuelvas a la última edición que tiene sentido como una pregunta –

+6

Se volvió a usar '^' ya que la pregunta (y las respuestas) tienen poco sentido. Como Peoro respondió correctamente su pregunta, debe aceptarla y seguir. Si tiene otra pregunta, haga otra pregunta. No edites este para hacer que todo el trabajo hecho sin sentido. – paxdiablo

Respuesta

62

Bueno, en primer lugar, elEl operadoren C/C++ es el XOR bit-wise. No tiene nada que ver con los poderes.

Ahora, respecto a su problema con el uso de la función pow(), some googling muestra que la fundición uno de los argumentos para duplicar la ayuda:

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

en cuenta que yo también echo el resultado de int como todos pow() sobrecargas devolver el doble, no int. No tengo un compilador de MS disponible, así que no pude verificar el código anterior.

Desde C99, there are also float and long double functions called powf and powl respectively, si eso sirve de ayuda.

58

En C ^ es el XOR bit a bit:

0101^1100 = 1001 // in binary 

hay ningún operador por el poder, que tendrá que utilizar la función de pow math.h (o alguna otra función similar):

result = pow(a, i); 
+0

usé esa función ... pero:/está dando un error esa llamada ambigua a la función sobrecargada. –

+0

@Abid Ali: ¿puedes publicar el error completo y tu código con 'pow'? – peoro

+0

aún no funciona ... –

1

En realidad, tiene que usar pow (número, potencia) ;. Desafortunadamente, los quilates no funcionan como un signo de poder en C. Muchas veces, si no puede hacer algo de otro idioma, es porque hay una función diferente que lo hace por usted.

+5

Los cuidados "funcionan", simplemente no hacen lo que se espera de ellos. – delnan

+1

Bueno, no funcionan para potencias, se necesita una función para eso. Pero el usuario que hizo la pregunta dijo que su acento circunflejo no estaba funcionando, a lo que respondí que en particular la metodología no funciona en C. Pero punto válido, voy a editar. –

+0

@paxdiablo Lo edité desde entonces. –

1

incluyen math.h y compilar con gcc test.c -lm

+0

Me temo que OP no usa GCC. '' :-( – peoro

+0

lo que es gcc y test.c -lm –

+0

@Abid:? ¿Qué compilador está usando – anup

4

pow() no funciona con int, de ahí el error de "error C2668: 'prisionero de guerra': llamada ambigua a función sobrecargada"

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

escribir su propia función de energía para int s:

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

'int's debe promoverse automáticamente a' double's, ¿no? Su enlace es sobre C++, de todos modos. – peoro

+0

Como esta función acepta flotantes y dobles, cuando la llama con ints, no sabe a qué tipo debe promover ints. – Max

+0

"Su enlace es sobre C++, de todos modos." Pero el el póster está usando el compilador de C++, ya que tiene un error debido a la sobrecarga. – Max

-3

En lugar de usar ^, use la función 'pow', que es una función predefinida que realiza la operación de alimentación y se puede utilizar incluyendo el archivo de encabezado math.h.

^ Este símbolo realiza la operación BIT-WISE XOR en C, C++.

Reemplace a^i con pow(a,i).

+5

¿Cómo agrega esto algo nuevo a las respuestas existentes de hace más de tres años? –

+0

Aunque le agradecemos su respuesta, sería mejor si proporcionara un valor adicional además de las otras respuestas. En este caso, su respuesta no proporciona un valor adicional, ya que otro usuario ya publicó esa solución. Si una respuesta anterior fue útil para usted, debe votarla en lugar de repetir la misma información. –

2

En primer lugar ^ es un operador de energía Bitwise XOR operatorno.

Puede usar otras cosas para encontrar la potencia de cualquier número. Puede usar for loop to find power of any number

Aquí hay un programa para encontrar x^y i.e.x y

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); 

También puede simplemente usar pow() function to find power of any number

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

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