2011-01-22 15 views

उत्तर

5

~ ऑपरेटर थोड़ा उलटा है, इसलिए ~ 0 आपको सभी के साथ एक पूर्णांक मान देता है (बाइनरी में)।

5

यह बाइट 0000 .... 0000 की थोड़ी सी अस्वीकृति है। यह एक पूर्णांक का मान है जहां सभी बिट्स 1 पर सेट होते हैं।

एक हस्ताक्षरित स्थिति में यह अधिकतम संभव मूल्य होगा। एक हस्ताक्षरित स्थिति में यह -1 है।

4

~ पूरक ऑपरेटर है, जो ऑपरेंड के बिट्स को फ़्लिप करता है। चूंकि शून्य में कोई बिट सेट नहीं है, इसलिए पूरक में सभी बिट सेट होंगे, जो अधिकतम आकार का पूर्णांक भी है (हस्ताक्षरित मानते हुए)। हस्ताक्षरित संख्याओं के लिए, आपको इसके बजाय -1 प्राप्त करने जा रहे हैं, इसलिए इसे "अधिकतम" कहकर एक गलत नामक है।

3

बिटवाई पूरक।
http://msdn.microsoft.com/en-us/library/d2bd4x66.aspx

एक शाब्दिक 0 (ऊपर दिए गए कोड में) एक int है।
एक int 32 बिट बाइनरी मान है। मान 0 में सभी बिट्स 0

~ ऑपरेटर थोड़ा सा प्रशंसा है। यानी मैं सभी बिट्स को स्वैप करता हूं।
सभी बिट्स के रूप में 0 वे सब 1. में बदल रहे हैं थे तो हम सभी बिट्स 1.

सी # तेज का उपयोग करता है 2 तारीफ करने के लिए सेट के साथ एक 32 बिट मूल्य
है। encodes कौन सा -1 एक पूर्णांक में के रूप में सभी बिट्स जा रहा है 1

0000 0000 0000 0000 0000 0000 0000 0000 == 0 

operator ~ 

1111 1111 1111 1111 1111 1111 1111 1111 == -1 

तो =>~0 == -1

+0

नकारात्मक वोट के बारे में Curios? –

3

~ बिटवाइज़ नहीं का मतलब है, यह देखते हुए पूर्णांक में सभी बिट्स उलट। एक हस्ताक्षरित int में यह आपको -1 देगा (क्योंकि int में सभी बिट्स 0 से 1 तक फ़्लिप किए जाएंगे) इस पर अधिक जानकारी के लिए दो पूरक देखें।

एक अहस्ताक्षरित int (uint) यह आप एक पूर्णांक के अधिकतम मूल्य देना होगा (के बाद से एक अहस्ताक्षरित int में सबसे महत्वपूर्ण बिट संकेत निर्धारित नहीं करता है।)

3

के रूप में विख्यात ~ में 0 0xFFFFFFFF पैदावार ।

हालांकि, मुझे संदेह है कि मूल प्रोग्रामर उलझन में है। int max = ~0 ; निष्पादित करने के लिए मान -1 पर हस्ताक्षर पूर्णांक max सेट करता है।

8

~ ऑपरेटर एकमात्र बिटवाई पूरक पूरक ऑपरेटर है जो बिटवाईक पूरक की गणना करता है। इसका मतलब है कि यह अपने तर्क में सभी बिट्स को उलट देता है (0s 1s और 1s बन जाता है 0)। इस प्रकार,

int max = ~0; 

32-बिट मूल्य 0000 0000 0000 0000 0000 0000 0000 00001111 1111 1111 1111 1111 1111 1111 1111 में जिसके परिणामस्वरूप का निषेध करने के लिए max स्थापित कर रही है जो। चूंकि हम इस परिणाम को Int32 में संग्रहीत कर रहे हैं, यह -1 जैसा ही है।

या नहीं, यह कहना

int max = ~0; 

या

int max = -1; 

संदर्भ पर निर्भर करता बेहतर है। यदि max का बिंदु एक संख्या है जिसके सभी बिट 1 हैं तो मैं पूर्व का चयन करूंगा। यदि max का बिंदु गैर-ऋणात्मक पूर्णांक की अधिकतम सूची की गणना करना है, तो मैं बाद वाले को चुनूंगा (ठीक है, मैं int max = Int32.MinValue; और इससे भी अधिक पसंद करूंगा, मैं बस int max = list.Max(); पसंद करूंगा)।

0

जैसा कि अन्य ने कहा है, ~ थोड़ा सा नकारात्मक ऑपरेशन है। यह पूर्णांक मान के सभी बिट्स ले जाएगा और 0 और 1 (0 -> 1 और 1 -> 0) टॉगल करेगा।

~ 0 एक हस्ताक्षरित पूर्णांक या Int32 के लिए -1 के बराबर है।

आमतौर पर ~ 0 या -1 को "सभी समावेशी" मुखौटा (तारांकन) के रूप में उपयोग किया जाता है जब आप किसी प्रकार की परत-आधारित फ़िल्टरिंग प्रणाली को कार्यान्वित कर रहे हैं जहां आप "लेयरमास्क" तर्क का उपयोग करते हैं जो डिफ़ॉल्ट रूप से बराबर होता है - 1 का अर्थ है कि यह कुछ भी वापस करेगा (फ़िल्टर नहीं करता है)। फ़िल्टर वास्तव में एक एंड ऑपरेशन (ValueToFilter & परतमास्क) का उपयोग कर रहा है।

valueToFilter & -1 वैल्यूफिल्टर भी गैर-शून्य होने पर हमेशा शून्य नहीं होगा। अन्यथा शून्य।

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