Почему 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