2011-07-21 12 views
5

बिटवाइज़ और/नहीं VB.NET से करने के लिए मूल कोड (VB.NET):परिवर्तित सी #

curStyle = curStyle And (Not ES_NUMBER) 

बदला गया कोड (सी #):

curStyle = curStyle & (!ES_NUMBER); 

लेकिन यह मुझे इस त्रुटि दे रहा है:

Operator '!' cannot be applied to operand of type 'long'

ES_NUMBER डेटा प्रकार का लंबा है। मैंने इसे int, string, आदि में बदलने की कोशिश की। सभी काम नहीं करते हैं।

मैं इस समस्या को कैसे हल करूं?

+0

CurStyle किस प्रकार का है? –

+0

परावर्तक प्राप्त करें। यह आपको और कई अन्य अनुवाद दिखाएगा। –

+0

'~' बिटवाई पूरक पूरक ऑपरेटर है, जो ऑपरेंड में हर बिट को फ़्लिप करता है। –

उत्तर

8

And& जैसा ही है; आपको वह सही मिला है। NotLong के सामने थोड़ा सा ऑपरेटर नहीं है। सी # समकक्ष ~ है।

सी # कोड होगा:

curStyle = curStyle & (­~ES_NUMBER); 

बाहर चेक Bitwise operators in c# OR(|), XOR(^), AND(&), NOT(~), सी # बिटवाइज़ ऑपरेटर्स समझा।

+0

हाँ, यह काम करता है! वाह!! बहुत बहुत धन्यवाद, दोस्त! :) –

+0

आप 'curStyle & = ~ ES_NUMBER;' भी लिख सकते हैं। –

0

एक एकल एम्परस आमतौर पर थोड़ा-सा ऑपरेशन होता है, लेकिन विस्मयादिबोधक एक तार्किक ऑपरेशन है। आप two ampersands एक ला C++ उपयोग करने के लिए आप एक तार्किक और चाहते हैं की जरूरत है:

curStyle = curStyle & (~ES_NUMBER); 
+0

एक एकल एम्परसैंड हमेशा थोड़ा-सा नहीं होता है और। विचार करें (सत्य और झूठा) जो एक तार्किक है और। –

+0

ओपी * कोशिश कर रहा है * बिट-वार मैनिपुलेशन करने के लिए! – Gabe

+0

@Gabe: हाँ, मैंने अभी वीबी में 'और' और 'नहीं 'कीवर्ड देखे हैं। दिलचस्प है कि वे पूरी तरह से काम करते हैं। –

2

एक बार फिर, प्रलेखन के लिए एक यात्रा साबित होता है:

curStyle = curStyle && (!ES_NUMBER); 

या एक टिल्ड आप थोड़ा-वार और चाहते हैं अनुदेशात्मक:

From MSDN:

The logical negation operator (!) ... is defined for bool and returns true if and only if its operand is false.

संख्यात्मक अभिव्यक्तियों के लिए किसी भी व्यवहार के बारे में कहीं भी दस्तावेज में कुछ भी नहीं है, जिसे मैं उम्मीद करता हूं कि ऑपरेटर को उन अभिव्यक्तियों के साथ काम करने के लिए परिभाषित नहीं किया गया है।

दूसरी ओर, MSDN has this to say about VB.NET's Not operator:

For numeric expressions, the Not operator inverts the bit values of any numeric expression and sets the corresponding bit in result according to the following table...

तो सवाल अब: कैसे VB.NET के "नहीं" सी के लिए # के व्यवहार को पुनः के लिए? शुक्र है, यह मुश्किल नहीं है: आप ~ operator का उपयोग कर सकते हैं।

curStyle = curStyle & (­~ES_NUMBER); 

और, अच्छा उपाय, documentation on &:

For integral types, & computes the bitwise AND of its operands.

0

कुंजी प्रश्न (और जो प्रदान की जाती है का जवाब नहीं है): एक पूर्णांक या एक bool curStyle है? क्या आप एक सच्चाई मूल्य (बूल, सच्चा/झूठा) पाने की कोशिश कर रहे हैं, या आप बिट फ़ील्ड में बिट्स को मास्क करने की कोशिश कर रहे हैं?

पूर्व मामले में, जहां curStyle एक bool (सच मान) है के लिए, आप कहते हैं:

curStyle = curStyle && !ES_NUMBER ; 

उत्तरार्द्ध मामले में, जहां curStyle एक पूर्णांक प्रकार है और आप अपने बिट्स हेरफेर करना चाहते, लेता है:

curStyle = curStyle & ~Not ES_NUMBER ; 
+0

ES_NUMBER एक लंबा है। इसलिए (ES_NUMBER नहीं) एक लंबा है। बदले में मतलब है कि सख्त प्रकार की जांच का उपयोग करते समय curStyle लंबा होना चाहिए। –

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