11 Stimmen

Warum gibt SELECT 2^3 in SQL Server 1 zurück?

Mögliches Duplikat:
Welche Bedeutung hat ein Caret (^) in einer SQL-Abfrage?

Warum gibt SELECT 2^3 in SQL Server 1 zurück?

Die obige Frage war eine Interviewfrage, auf die ich gestoßen bin, und ich konnte nicht verstehen, warum sie mit 1.

Nachdem ich ein wenig gegoogelt hatte, fand ich heraus, dass es sich um einen bitweisen Operator handelt. Aber ich konnte immer noch nicht verstehen, warum 1 eine Ausgabe ist.

Ich habe Grundkenntnisse in Abfragen, gespeicherten Prozeduren und T-SQL. Kann mir das bitte jemand erklären:

  1. Wie erhalte ich 1 in SELECT 2^3?
  2. Was ist der praktische Nutzen solcher Operatoren?

Und wenn es einen praktischen Nutzen gibt, was sind dann die besten Praktiken bei der Verwendung solcher Operatoren?

24voto

Denn ^ ist XOR Betreiber.

Wahrheitstabelle für XOR

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

Mit anderen Worten: Wir haben nur dann ein Ergebnis, wenn zwei Bits unterschiedlich sind.

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

Für Sie ist es sein Fall

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

Mehr über XOR-Gatter

Verwendung

Zum Beispiel für Maske ( bitweise Operationen ) Handhabung oder Kryptographie.

11voto

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

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

Der eigentliche praktische Nutzen besteht darin, Bits umzuschalten, wenn sie als Merker verwendet werden.

6voto

Es ist die Bitweises exklusives ODER .

Die Wahrheitstabellen für OR und XOR (exklusives OR) sind unterschiedlich. ODER bedeutet: "Wenn eine der beiden Eingaben wahr ist, ist auch die Ausgabe wahr". XOR bedeutet: "Wenn der eine oder der andere, aber nicht beide Eingänge wahr sind, ist der Ausgang wahr".

OR-Wahrheitstabelle: falsch OR falsch = falsch wahr ODER falsch = wahr falsch ODER wahr = wahr wahr ODER wahr = wahr

XOR-Wahrheitstabelle: falsch XOR falsch = falsch wahr XOR falsch = wahr falsch XOR wahr = wahr wahr XOR wahr = falsch

Die Abfrage wandelt also jede Eingabe in eine Binärzahl um und führt dann für jedes Bit ein XOR durch. 2 ^ 3:

    00000010 (2) 
XOR
    00000011 (3)
= 
    00000001

2voto

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

10 XOR 11 = 01
01 binary = 1 in decimal

1voto

Badiboy Punkte 1499

Es scheint, dass Sie die Funktion "Power" verwenden müssen? :)

POWER Gibt den Wert des angegebenen Ausdrucks in der angegebenen Potenz zurück.

Syntax POWER ( numerischer_Ausdruck , y )

select power(2, 3)

gibt 8...

PS: Die Verwendung des ^-Operators (und anderer bitweiser Operatoren) ist notwendig, wenn Sie einige numerische Felder als "Masken"-Daten interpretieren und Operationen mit Bits von Zahlen durchführen wollen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X