2009-07-10 11 views
16

में बिट-फ्लिपिंग ऑपरेशंस मेरे डेटाबेस में एक बिटमास्कड int फ़ील्ड है। आम तौर पर मैं इसे सी # कोड के माध्यम से प्रबंधन, लेकिन अब मैं T-SQL का उपयोग कर नकाब में एक सा फ्लिप करने की जरूरत हैटी-एसक्यूएल

मैं निम्नलिखित कैसे पूरा करते हैं:

सा मैं चाहता हूँ फ्लिप करने: 1 < < 8 (256)

मुखौटा मूल्य इससे पहले कि मैं फ्लिप: 143

मैं के बाद मुखौटा मूल्य फ्लिप: 399

यह टी-एसक्यूएल में गायब होने वाले बिट ऑपरेटर के बिना किया जा सकता है, है ना?

उत्तर

25

उपयोग XOR:

SELECT value^256 

तो आपके मामले में, SELECT 143^256 वास्तव में वापस आ जाएगी 399. आप प्रतिपादक में पारित करने के लिए और साथ ही चाहते हैं:

SELECT value^POWER(2, power) 
+0

धन्यवाद! यह मेरी समस्या हल हो गया! क्या एक सुंदर तरीके से बिट को चालू करने का कोई तरीका है? (मैंने पहले से ही यह किया है, लेकिन यह बदसूरत लग रहा है ...) –

+2

क्या आप फ्लिप करना चाहते हैं या चालू करना चाहते हैं? फ्लिप - एक्सओआर (^) का उपयोग करें; चालू करें - या (|) का उपयोग करें। यदि आप अधिक लालित्य चाहते हैं, तो एक छोटे से नामित उपयोगकर्ता परिभाषित फ़ंक्शन में लपेटें। :) –

20

TSQL बिटवाइज़ ऑपरेटर्स पाया जा सकता है here और उनका उपयोग करने के तरीके पर अच्छा लेख here

+1

प्रश्न थोड़ा स्थानांतरण करने के बारे में है, आपके द्वारा पोस्ट किए गए लेखों के पास – Edwin

+3

के साथ कुछ लेना देना नहीं है प्रश्न थोड़ा-सा स्थानांतरण के बारे में नहीं है, थोड़ा-सा फ्लिपिंग के बारे में है। –

+0

शीर्षक बिट स्थानांतरण के बारे में गलत है, लेकिन बिट फ़्लिपिंग के बारे में वास्तविक सवाल है। – DaveBoltman

संबंधित मुद्दे