2010-11-05 6 views
10

संभव डुप्लिकेट:
What does a caret (^) do in a SQL query?SQL सर्वर में चयन 2^3 वापसी 1 क्यों करता है?

क्यों का चुनाव करता है 2^3 एसक्यूएल सर्वर में वापसी 1?

ऊपर एक साक्षात्कार सवाल मैं भर में आया था और नहीं मिल सका कारण है कि यह रिटर्न 1.

थोड़ा googling के बाद, मुझे पता चला है कि यह एक बिटवाइज़ ऑपरेटर है। लेकिन मुझे अभी भी समझ में नहीं आया कि 1 आउटपुट क्यों है।

मेरे पास प्रश्न, संग्रहित प्रक्रिया और टी-एसक्यूएल का मूल ज्ञान है। किसी को भी मुझे समझा कृपया कर सकते हैं:

  1. मैं कैसे चयन 2^3 में 1 मिलता है?
  2. ऐसे ऑपरेटरों का व्यावहारिक उपयोग क्या है?

और अगर वहाँ एक व्यावहारिक उपयोग है, तो क्या सर्वोत्तम प्रथाओं ऐसे ऑपरेटरों का उपयोग करते समय कर रहे हैं

+0

सुनिश्चित नहीं क्यों, लेकिन 'चयन पाउ (2,3)' आप 'देना चाहिए 8'! – RobertPitt

उत्तर

23

क्योंकि^XOR ऑपरेटर है। XOR

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

के लिए

सत्य तालिका परिणाम में एक और शब्द हम एक है केवल जब दो टुकड़े अलग हैं में।

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

आप इसे मामले के लिए XOR gate के बारे में अपनी

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

अधिक

प्रयोग

mask ( bitwise operations) के लिए

उदाहरण के लिए हैंडलिंग या क्रिप्टोग्राफी।

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 

वास्तविक व्यावहारिक उपयोग झंडे के रूप में उपयोग किए जाने पर बिट्स टॉगल करना है।

+0

वे किस परिदृश्य में उपयोग किए जाते हैं और वे एक क्वेरी के प्रदर्शन को कैसे प्रभावित करते हैं, जिसमें इसका उपयोग किया जाता है और उनके लिए विकल्प (यदि कोई हैं)। – Pratik

+0

जब आप झंडे के रूप में उपयोग की जाने वाली बिट्स टॉगल करना चाहते हैं, या जब आप इसे उपयोग करने वाले कुछ एल्गोरिदम को कार्यान्वित करना चाहते हैं तो उनका उपयोग किया जाता है। उन के अलावा, आप इसे अनदेखा कर सकते हैं। –

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

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

ऐसा लगता है कि आपको "पावर" फ़ंक्शन का उपयोग करने की आवश्यकता है? :)

पावर निर्दिष्ट शक्ति को दी गई अभिव्यक्ति का मान देता है।

सिंटेक्स बिजली (numeric_expression, वाई)

select power(2, 3) 

रिटर्न 8 ...

पुनश्च:^ऑपरेटर (और अन्य bitwize ऑपरेटरों) का उपयोग करना की जरूरत है जब आप के रूप में कुछ संख्यात्मक फ़ील्ड की व्याख्या करना चाहते हैं "मुखौटा" डेटा और संख्याओं से बिट्स का उपयोग कर संचालन करते हैं।

+1

नहीं, यह "बिजली का चयन नहीं करें (2, 3)"। यह "2^3 का चयन करें" है। – Pratik

+1

ठीक है तो। आम तौर पर कुछ छात्र "शक्ति" के बजाय "^" का उपयोग करने का प्रयास करते हैं, इसलिए मुझे लगता है कि यह है। :) – Badiboy

6

यह बिटवा एक्सक्लूसिव या है।

OR और XOR (अनन्य OR) के लिए सत्य सारणी अलग हैं। या इसका अर्थ है 'यदि इनमें से कोई भी इनपुट सत्य है, तो आउटपुट सत्य है'। XOR का अर्थ है 'एक या दूसरे, लेकिन दोनों आदानों की सही हैं, तो उत्पादन सच है'

या सच्चाई तालिका: = झूठी या झूठी = false सच या झूठे सच झूठी या सच = सच सच या सच = सच

XOR सच्चाई तालिका: झूठी XOR झूठी = false सच XOR झूठी = सच झूठी XOR सच = सच सच XOR सच = false

तो क्या क्वेरी कर रही है प्रत्येक रूपांतरित है बाइनरी में इनपुट, फिर एक एक्सओ कर रहे हैं प्रत्येक बिट पर आर। 2^3:

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

मुझे एक्सओआर के रूप में याद है 'यदि दोनों इनपुट समान हैं तो झूठी और सत्य' और OR के लिए 'यदि दोनों इनपुट झूठे हैं तो गलत और सत्य';) –