2010-11-05 39 views
10

thể trùng lặp:
What does a caret (^) do in a SQL query?Tại sao SELECT 2^3 trả lại 1 trong SQL Server?

Tại sao CHỌN 2^3 trở lại 1 trong SQL Server?

Trên đây là một câu hỏi phỏng vấn tôi đi qua và không thể hiểu tại sao nó trả về 1.

Sau khi googling một chút, tôi phát hiện ra rằng đó là một nhà điều hành Bitwise. Nhưng tôi vẫn không thể hiểu tại sao 1 là đầu ra.

Tôi có kiến ​​thức cơ bản về truy vấn, thủ tục lưu trữ và T-SQL. Ai có thể vui lòng giải thích cho tôi:

  1. Làm cách nào để nhận 1 trong SELECT 2^3?
  2. Việc sử dụng thực tế của các nhà khai thác như vậy là gì?

Và nếu có một ứng dụng thực tế, thực tiễn tốt nhất là sau đó những gì khi sử dụng các nhà khai thác như

+0

Không chắc chắn lý do tại sao 'SELECT POW (2,3)' sẽ cung cấp cho bạn '8'! – RobertPitt

Trả lời

23

Do^là XOR điều hành.

bảng Truth cho XOR

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

Trong một từ kết quả chúng ta phải có một chỉ khi hai bit là khác nhau.

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

For You trường hợp nó nó

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

Thông tin thêm về XOR gate

Cách sử dụng

Ví dụ cho mask (bitwise operations) xử lý hoặc mật mã.

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 

Cách sử dụng thực tế thực tế là chuyển bit khi được sử dụng làm cờ.

+0

Trong trường hợp chúng được sử dụng và cách chúng tác động đến hiệu suất truy vấn, trong đó nó được sử dụng và các lựa chọn thay thế (nếu có) cho chúng. – Pratik

+0

Chúng được sử dụng khi bạn muốn chuyển đổi các bit được sử dụng làm cờ hoặc khi bạn muốn triển khai một số thuật toán sử dụng nó. Khác với những người, bạn có thể bỏ qua nó. –

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

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

Có vẻ như bạn cần sử dụng chức năng "power"? :)

POWER Trả về giá trị của biểu thức đã cho với công suất đã chỉ định.

Cú pháp POWER (numeric_expression, y)

select power(2, 3) 

lợi nhuận 8 ...

PS: Sử dụng^điều hành (và các nhà khai thác bitwize khác) là cần thiết khi bạn muốn giải thích một số trường số như dữ liệu "mặt nạ" và thực hiện các thao tác sử dụng bit từ các số.

+1

Không có "quyền chọn (2, 3)" của nó. Đó là "chọn 2^3". – Pratik

+1

OK. Thông thường một số sinh viên cố gắng sử dụng "^" thay vì "sức mạnh", vì vậy tôi chỉ cho rằng đó là nó. :) – Badiboy

6

Bitwise Exclusive OR.

Các bảng chân lý cho OR và XOR (OR độc quyền) khác nhau. HOẶC có nghĩa là 'Nếu một trong hai đầu vào này là đúng, đầu ra là đúng'. XOR nghĩa là 'Nếu một hay cách khác, nhưng không phải cả hai đầu vào là đúng sự thật, kết quả là true'

HOẶC thật bảng: sai hay sai = false đúng hay sai = true sai HOẶC đúng = true đúng HOẶC đúng = true

XOR thật bảng: sai XOR sai = false đúng XOR sai = true XOR đúng sai = true đúng XOR đúng = false

Vì vậy, những gì các truy vấn được thực hiện là chuyển đổi mỗi nhập vào nhị phân, sau đó thực hiện XO R trên mỗi bit. 2^3:

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

Tôi nhớ XOR là 'nếu cả hai đầu vào giống nhau thì false false true' và cho OR là' nếu cả hai đầu vào là false thì false false true';) –

Các vấn đề liên quan