Почему SELECT 2 ^ 3 возвращает 1 в SQL Server?

Возможный дубликат:
Что делает каретка (^) в SQL-запросе?

Почему SELECT 2 ^ 3 возвращает 1 в SQL Server?

Выше был вопрос интервью, с которым я столкнулся, и не мог понять, почему он возвращает 1.

После того, как я немного поработал, я узнал, что это побитовый оператор. Но я все еще не мог понять, почему 1 является выходом.

У меня есть базовые знания о запросах, хранимой процедуре и T-SQL. Кто-нибудь, пожалуйста, объясните мне:

  • Как получить 1 в SELECT 2 ^ 3?
  • Каково практическое использование таких операторов?

И если есть практическое применение, то каковы наилучшие практики при использовании таких операторов

Ответ 1

Потому что ^ - XOR.

Таблица истинности для XOR

-------
|^|1|0|
-------
|1|0|1|
-------
|0|1|0|
-------

Другими словами, в результате мы имеем один, только когда два бита отличаются.

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

Для вас это его

binary - decimal
00010  - 2
00011  - 3
---------- ^
00001  - 1

Подробнее о XOR gate

Использование

Например, для mask (побитовые операции) обработки или криптографии.

Ответ 2

a b a^b
-------
0 0  0
0 1  1
1 0  1
1 1  0

2   0b10
3   0b11
--------
2^3 0b01 = 1

Реальное практическое использование заключается в переключении битов при использовании в качестве флагов.

Ответ 3

это Побитовое исключение ИЛИ.

Таблицы истинности для OR и XOR (исключительные OR) различны. ИЛИ означает "Если любой из этих входов является истинным, вывод будет истинным". XOR означает "Если один или другой, но не оба входа являются истинными, вывод равен true"

ИЛИ таблица истинности: false ИЛИ false = false true ИЛИ false = true false ИЛИ true = true true ИЛИ true = true

Таблица истинности XOR: false XOR false = false true XOR false = true false XOR true = true true XOR true = false

Итак, что делает запрос, это преобразование каждого входа в двоичный файл, а затем выполнение XOR для каждого бита. 2 ^ 3:

    00000010 (2) 
XOR
    00000011 (3)
= 
    00000001

Ответ 4

2 in binary = 10
3 in binary = 11
^ bitwise (XOR)

10 XOR 11 = 01
01 binary = 1 in decimal

Ответ 5

Кажется, вам нужно использовать функцию "power"?:)

МОЩНОСТИ Возвращает значение данного выражения к указанной мощности.

Синтаксис POWER (numeric_expression, y)

select power(2, 3)

возвращает 8...

PS: Использование оператора ^ (и других операторов битвизации) необходимо, когда вы хотите интерпретировать некоторые числовые поля как "маску" данных и выполнять операции с использованием битов из чисел.