2010-11-05 21 views
10

Duplicar posible:
What does a caret (^) do in a SQL query?¿Por qué SELECCIONAR 2^3 devuelve 1 en SQL Server?

¿Por qué seleccionar 2^3 1 retorno en SQL Server?

Lo anterior fue una pregunta de la entrevista me encontré y no podía conseguir por lo que devuelve 1.

Tras Google un poco, descubrí que es un operador de bits. Pero aún no podía entender por qué 1 es una salida.

Tengo conocimientos básicos de consultas, procedimientos almacenados y T-SQL. ¿Alguien puede explicarme por favor:

  1. ¿Cómo obtengo 1 en SELECCIONAR 2^3?
  2. ¿Cuál es el uso práctico de tales operadores?

Y si hay un uso práctico, entonces ¿cuáles son las mejores prácticas durante el uso de este tipo de operadores

+0

No sé por qué, pero 'prisioneros SELECT (2,3)' 'debe darle 8'! – RobertPitt

Respuesta

23

Debido^es XOR operador.

Tabla de verdad para XOR

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

En otras palabras resultado tenemos uno tiene solamente cuando dos bits son diferentes.

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

para usted caso de que su

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

Más sobre XOR gate

Uso

Por ejemplo, para mask (bitwise operations) la manipulación o la criptografía.

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

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

El uso práctico real es alternar bits cuando se utilizan como banderas.

+0

En qué escenarios se utilizan y cómo afectan el rendimiento de una consulta, en la que se utiliza y las alternativas (si corresponde) para ellos. – Pratik

+0

Se usan cuando quiere alternar bits utilizados como banderas, o cuando quiere implementar algún algoritmo que lo use. Aparte de esos, puedes ignorarlo. –

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

10 XOR 11 = 01 
01 binary = 1 in decimal 
1

Parece que necesita usar la función "power"? :)

POWER Devuelve el valor de la expresión dada con la potencia especificada.

Sintaxis POWER (numeric_expression, y)

select power(2, 3) 

retornos 8 ...

PS: El uso de operador^(y otros operadores bitwize) es necesario cuando se quiere interpretar algunos campos numéricos como "enmascarar" datos y realizar operaciones utilizando bits de números.

+1

No, no es "seleccionar potencia (2, 3)". Es "seleccionar 2^3". – Pratik

+1

OK, entonces. Por lo general, algunos estudiantes intentan usar "^" en lugar de "poder", así que supongo que lo es. :) – Badiboy

6

es el Bitwise Exclusive O.

Las tablas de verdad para OR y XOR (OR exclusivo) son diferentes. O significa 'Si cualquiera de estas entradas es verdadera, la salida es verdadera'. XOR significa 'Si uno o el otro, pero no ambos de las entradas son verdaderas, la salida es verdadera'

tabla

OR verdad: falsa o falsa = false verdadero o falso = true falsa o verdadera = true cierto o verdadero = true

XOR tabla de verdad: falsa XOR falsa = false cierto XOR = sí falsa XOR cierto = true cierto XOR cierto = false

Entonces, ¿qué la consulta está haciendo es convertir cada entrada en binario, luego haciendo un XO R en cada bit. 2^3:

00000010 (2) 
XOR 
    00000011 (3) 
= 
    00000001 
+0

Recuerdo XOR como 'si las entradas son las mismas que false else else' y para OR como' si ambas entradas son falsas y luego falso else true';) –

Cuestiones relacionadas