2011-01-30 4 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); 
} 

Я не знаю, почему этот «^» не работает как власть.Почему мой оператор мощности (^) не работает?

+0

отлично работает для меня после того, как я заменить возвращаемое значение основного() с «Int». Я не ожидал, что это сработает, поскольку '' и '' обычно используются вместо '" stdio.h "и' "math.h" '. Но похоже, что GCC на самом деле все равно. –

+7

@Abid Часто бывает полезно редактировать вопросы, но в этом случае редактирование сделало вопрос бессмысленным (вы заменили проблему на решение). Лучше оставить исходные вопросы, чтобы другие могли узнать, но теперь это просто сбивает с толку (в вопросе нет «^»). Предложите вернуться к последнему праву, которое имеет смысл в качестве вопроса. –

+6

Изменен на использование '^', так как вопрос (и ответы) не имеет смысла. Поскольку peoro правильно ответил на ваш вопрос, вы должны принять его и продолжить. Если у вас есть другой вопрос, задайте другой вопрос. Не редактируйте этот, чтобы сделать всю работу бессмысленной. – paxdiablo

ответ

62

Ну, во-первых, то ^ Оператор в C/C++ - бит-мудрый XOR. Это не имеет ничего общего с властью.

Теперь, что касается вашей проблемы с помощью функции pow(), some googling показывает, что кастинг одного из аргументов по удвоению помогает:

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

Обратите внимание, что я также бросить результат в int, как все pow() перегрузок вернуться дважды, не int. У меня нет компилятора MS, поэтому я не мог проверить код выше.

С C99, there are also float and long double functions called powf and powl respectively, если это поможет.

58

В C ^ является побитовое исключающее ИЛИ:

0101^1100 = 1001 // in binary 

Там нет оператора за власть, вы должны будете использовать pow функцию из math.h (или какой-либо другой аналогичной функции):

result = pow(a, i); 
+0

Я использовал эту функцию .. но:/она дала ошибку, что неоднозначный вызов перегруженной функции. –

+0

@Abid Ali: можете ли вы опубликовать всю ошибку и свой код с 'pow'? – peoro

+0

его не работает еще .. –

1

Вы действительно должны использовать pow (количество, мощность) ;. К сожалению, караты не работают как знак силы в C. Много раз, если вы обнаруживаете, что не можете что-то делать с другого языка, это потому, что существует разная функция, которая делает это за вас.

+5

Уход за «работой», они просто не делают того, чего вы можете ожидать от них. – delnan

+1

Ну, они не работают для сил, для этого нужна функция. Но пользователь, который задал вопрос, сказал, что его каретка не работает, на что я ответил, что определенная методология не работает в C. Но верная точка, я отредактирую. –

+0

@paxdiablo Я отредактировал его с тех пор. –

1

включают math.h и компиляции с GCC test.c -lm

+0

Боюсь, что OP не использует GCC. ':-(' – peoro

+0

Что такое GCC AND test.c -lm? –

+0

@Abid: какой компилятор вы используете? – anup

4

Pow() не работает с int, следовательно, ошибка "Ошибка C2668: 'пау': неоднозначный вызов перегруженной функции"

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

Напишите свою собственную функцию питания для int с:

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

'int' следует автоматически повышать до 'double', не так ли? Ваша ссылка о C++, так или иначе. – peoro

+0

Поскольку эта функция принимает поплавки и удваивает, когда вы вызываете ее с помощью ints, она не знает, к какому типу она должна продвигать ints. – Max

+0

«Ваша ссылка о C++, во всяком случае». плакат использует компилятор C++, так как он имеет ошибку из-за перегрузки. – Max

-3

Вместо использования ^ используйте функцию «pow», которая является предопределенной функцией, которая выполняет операцию Power, и ее можно использовать, включив заголовочный файл math.h.

^ Этот символ выполняет операцию BIT-WISE XOR в C, C++.

Заменить a^i на pow(a,i).

+5

Как это добавляет ничего нового в существующие ответы более трех лет? –

+0

Хотя мы благодарим вас за ваш ответ, было бы лучше, если бы оно обеспечило дополнительную ценность поверх других ответов. В этом случае ваш ответ не дает дополнительного значения, поскольку другой пользователь уже опубликовал это решение. Если предыдущий ответ был полезен для вас, вы должны проголосовать за него вместо повторения той же информации. –

2

Прежде всего ^ является Bitwise XOR operatorне оператор мощности.

Вы можете использовать другие предметы, чтобы найти в себе мощность любого числа. Вы можете использовать for loop to find power of any number

Здесь вы найдете программу x^y i.e.х у

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

Вы также можете просто использовать 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); 
Смежные вопросы