Почему 10 ^ 1 это 11?

Я сейчас учусь C ++. Я пытался вычислить мощность целого числа, используя выражение:

val=10^1;

Вместо ожидаемого ответа 10результат был 11, Я исправил проблему с помощью pow функция библиотеки math.h, но мне интересно, почему это утверждение дает мне неправильный результат.

12

Решение

Потому что ^ является исключительным или оператором, а не оператором возведения в степень. По сути, поскольку последний бит 10 в двоичном виде равен 0, при применении исключительного значения или 1 последний бит преобразуется в 1, поскольку он отличается от 0.

1

Другие решения

Нет! Вы думаете, что это сила? Не забывайте это (в 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

Это побитовый эксклюзив или оператор, а не власть. В двоичном виде:

10 = 1010
1 = 0001
val= 1011 = 11 in decimal
8

В C и C ++, 10^1 является 10 XOR 1не 10 to the power of 1,

5

Потому что в C ++ нет оператора power: ^ это XOR,

1010 является 10102 в двоичном формате; 110 является 00012. XORих объединение дает 10112, который 1110.

Если вы хотите получить 10N, использовать pow функция от <cmath> заголовок:

val=pow(10, 1);
2

^ это бинарный XOR оператор в C ++:

10 ^ 1 =

00001010
^  00000001
=  --------
00001011 = 11
2
По вопросам рекламы [email protected]