Почему мой оператор мощности (^) не работает?

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

Почему ^ не работает как оператор питания?

Ответ 1

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

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

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

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

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

Ответ 2

В C ^ находится побитовый XOR:

0101 ^ 1100 = 1001 // in binary

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

result = pow( a, i );

Ответ 3

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

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

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

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

Ответ 4

Прежде всего ^ является Побитовым оператором 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);

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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