Я сейчас учусь C ++. Я пытался вычислить мощность целого числа, используя выражение:
val=10^1;
Вместо ожидаемого ответа 10
результат был 11
, Я исправил проблему с помощью pow
функция библиотеки math.h, но мне интересно, почему это утверждение дает мне неправильный результат.
Потому что ^ является исключительным или оператором, а не оператором возведения в степень. По сути, поскольку последний бит 10 в двоичном виде равен 0, при применении исключительного значения или 1 последний бит преобразуется в 1, поскольку он отличается от 0.
Нет! Вы думаете, что это сила? Не забывайте это (в C ++ и некоторых языках программирования):
Обязательно прочитайте это:
Побитовый XOR принимает две битовые комбинации одинаковой длины и выполняет логическую операцию исключающего ИЛИ для каждой пары соответствующих битов. Результат в каждой позиции равен 1, если только первый бит равен 1, или только второй бит равен 1, но будет равен 0, если оба равны 0 или оба равны 1. В этом мы выполняем сравнение двух битов, равное 1, если два биты разные, и 0, если они одинаковы. Например:
0101 (decimal 5)
XOR 0011 (decimal 3)
= 0110 (decimal 6)
Побитовый XOR может использоваться для инвертирования выбранных битов в регистре (также называемый переключением или переключением). Любой бит может быть переключен с помощью XOR, равного 1. Например, с учетом битовой комбинации 0010 (десятичный 2) второй и четвертый биты могут переключаться с помощью битовой XOR с битовой комбинацией, содержащей 1 во второй и четвертой позициях:
0010 (decimal 2)
XOR 1010 (decimal 10)
= 1000 (decimal 8)
Этот метод может использоваться для манипулирования битовыми комбинациями, представляющими наборы логических состояний.
Источник: Википедия
Это побитовый эксклюзив или оператор, а не власть. В двоичном виде:
10 = 1010
1 = 0001
val= 1011 = 11 in decimal
В C и C ++, 10^1
является 10 XOR 1
не 10 to the power of 1
,
Потому что в C ++ нет оператора power: ^
это XOR
,
10
10 является 1010
2 в двоичном формате; 1
10 является 0001
2. XOR
их объединение дает 1011
2, который 11
10.
Если вы хотите получить 10N, использовать pow
функция от <cmath>
заголовок:
val=pow(10, 1);
^
это бинарный XOR
оператор в C ++:
10 ^ 1 =
00001010
^ 00000001
= --------
00001011 = 11