математический оператор не работает должным образом - PullRequest
3 голосов
/ 08 января 2010
short sho1, sho2;
printf("Enter two shorts.\n");
scanf("%hd %hd", &sho1, &sho2);
printf("%hd^%hd is %hd.\n", sho1, sho2, sho1^sho2);

Когда я ввожу '2 2', я получаю этот вывод:

2 ^ 2 равно 0.

Как получилось? Я использую компилятор MinGW GCC в Eclipse, на случай, если это имеет какое-либо значение.

Ответы [ 6 ]

18 голосов
/ 08 января 2010

^ - это не математический оператор степени в C, это побитовый оператор исключающего ИЛИ . Возможно, вам нужна функция pow , которая занимает два двойных числа.

7 голосов
/ 08 января 2010

Вы не используете оператор, который, как вы думаете, вы используете.

^ - это битовый оператор XOR .

Вам нужна функция pow .

Прототип: двойной пау (двойной б, двойной р);

Заголовочный файл: math.h (C) или cmath (C ++)

Объяснение: Эта функция повышает b до уровня p.

В Википедии есть полезный список операторов , которые действительны в C и C ++.

3 голосов
/ 08 января 2010

В C нет оператора "power" - ^ это оператор XOR (побитовое исключающее ИЛИ)

3 голосов
/ 08 января 2010

Оператор ^ не является оператором питания; это побитовый оператор XOR. Для оператора питания вы хотите использовать функцию pow, объявленную в math.h. Таким образом:

pow(2.0, 2.0)

вернет 4.0 (намеренно подчеркивая, что параметры и возвращаемое значение являются двойными).

Обратите внимание, что pow возвращает значение типа double, поэтому вам придется изменить спецификатор формата на %g:

printf("%hd^%hd is %g.\n", sho1, sho2, pow((double)sho1, (double)sho2));
2 голосов
/ 08 января 2010

Вы можете использовать функцию pow () в C.

pow(base, exponent);

Он находится в заголовочном файле math.h.

1 голос
/ 08 января 2010

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

pow(2,2)

...