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