2011-08-04 7 views
75

नीचे लाइनों में:क्या करता है | = (एकल पाइप बराबर) और & = (एकल एम्परसेंड बराबर) मतलब

//Folder.Attributes = FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly; 
Folder.Attributes |= FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly; 


Folder.Attributes |= ~FileAttributes.System; 
Folder.Attributes &= ~FileAttributes.System; 

क्या करता |= (एकल पाइप बराबर) और &= (एकल एम्परसेंड बराबर) सी # में मतलब
मैं दूसरों रखने के साथ सिस्टम विशेषता निकालना चाहते हैं ...

+0

मैं अपने खुद के डमी के संस्करण बनाने के लिए कोशिश की है http://www.shrinkrays.net/articles/csharp-bit-manipulation- पर इस बात का (मुझे लगता है कि समूह में आते हैं) दर-example.aspx। ~ फ़ाइल एट्रिब्यूट्स का एक नहीं या विपरीत है। सिस्टम –

+0

@ क्रिस एस: लिंक/अच्छा – MoonLight

उत्तर

103

वे compound assignment ऑपरेटरों, अनुवाद (बहुत शिथिल)

x |= y; 
रहे

x = x | y; 

और & के लिए एक ही में। एक निहित कलाकार के संबंध में कुछ मामलों में थोड़ा और विस्तार है, और लक्ष्य चर का मूल्यांकन केवल एक बार किया जाता है, लेकिन यह मूल रूप से इसका सारांश है।

गैर-कंपाउंड ऑपरेटरों के मामले में, & is a bitwise "AND" और | is a bitwise "OR"

संपादित करें: इस मामले में आप Folder.Attributes &= ~FileAttributes.System चाहते हैं। यह समझने के लिए क्यों:

  • ~FileAttributes.System का अर्थ है "सभी विशेषताओं System को छोड़कर"
  • & का अर्थ है "परिणाम सभी विशेषताओं जो संकार्य के दोनों किनारों पर पाए जाते हैं कि" (~ एक बिटवाइज़-नहीं है)

तो यह मूल रूप से एक मुखौटा के रूप में कार्य - केवल उन विशेषताओं, जिसमें ("सब कुछ सिस्टम को छोड़कर") दिखाई बरकरार रहती है। सामान्य में:

  • |= ही कभी लक्ष्य को बिट्स जोड़ देगा
  • &= ही कभी लक्ष्य से बिट्स निकाल देंगे
+1

'x = x के लिए धन्यवाद। (वाई); 'इसका वर्णन करने का एक बेहतर तरीका है क्योंकि 'x | = y + z;' 'x = x जैसा नहीं है। y + z; ' – IronMensan

+0

उत्तर के लिए धन्यवाद/लेकिन मेरे उद्देश्य के लिए (सिस्टम विशेषता को हटा रहा है) जिसे मुझे (| = या & =) का उपयोग करना चाहिए? – MoonLight

+1

@LostLord: 'Folder.Attributes & = ~ FileAttributes.System;' –

27

a |= b कि a छोड़कर a = a | b के बराबर है मूल्यांकन किया जाता है केवल एक बार
a &= b कि a छोड़कर a = a & b के बराबर है अन्य बिट्स बदले बिना सिस्टम सा दूर करने के लिए,

का उपयोग आदेश में केवल एक बार

मूल्यांकन किया जाता है

Folder.Attributes &= ~FileAttributes.System; 

~ थोड़ा सा नकारात्मकता है। इस प्रकार आप सिस्टम बिट को छोड़कर सभी बिट्स को 1 पर सेट कर देंगे।and मुखौटा 0 पर सेट होगा प्रणाली और अन्य सभी बिट्स बरकरार छोड़ के साथ आईएनजी क्योंकि 0 & x = 0 और 1 & x = x किसी भी x

3

मैं दूसरों रखने के साथ सिस्टम विशेषता निकालना चाहते हैं ..

आप इसलिए इस तरह कर सकते हैं:

Folder.Attributes ^= FileAttributes.System; 
+1

मुझे लगता है कि आप इसके बजाय एक एक्सओआर का उपयोग करना चाहते हैं। – GameZelda

+0

थोड़ा उलझन/~ आवश्यक है या – MoonLight

+0

@LostLord: यह निश्चित रूप से है! स्पष्टीकरण –

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