Почему мой оператор питания (^) не работает? - PullRequest
48 голосов
/ 30 января 2011
#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);
}

Я не знаю, почему этот '^' не работает как сила.

Ответы [ 7 ]

71 голосов
/ 30 января 2011

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

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

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

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

Начиная с C99, существуют также функции float и long double, называемые powf и powl соответственно , если это поможет.

62 голосов
/ 30 января 2011

В C ^ - битовое XOR:

0101 ^ 1100 = 1001 // in binary

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

result = pow( a, i );
4 голосов
/ 30 января 2011

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

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;
}
3 голосов
/ 29 июля 2015

Прежде всего ^ - это битовый оператор XOR , а не оператор мощности.

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

Вот программа для поиска x ^ y т.е. 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);

Вы также можете просто использовать функцию pow (), чтобы найти мощность любого числа

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

printf("2^5 = %lf", power);
1 голос
/ 30 января 2011

включает math.h и компилируется с gcc test.c -lm

1 голос
/ 30 января 2011

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

0 голосов
/ 04 августа 2014

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...