क्यों bitwise ऑपरेशन (~0);
प्रिंट -1? बाइनरी में, 0 नहीं होना चाहिए 1। क्यूं कर ?bitwise ऑपरेटर नहीं
उत्तर
आप वास्तव में काफी करीब हैं।
द्विआधारी में, न 0 1
हाँ, यह बिल्कुल सही है होना चाहिए जब हम के बारे में एक सा बात कर रहे हैं।
हाउवर, int
जिसका मूल्य 0 है वास्तव में सभी शून्यों के 32 बिट्स हैं! ~
सभी 32 शून्यों को 32 में बदल देता है।
System.out.println(Integer.toBinaryString(~0));
// prints "11111111111111111111111111111111"
यह -1
के दो के पूरक प्रतिनिधित्व है।
:
System.out.println(Integer.toBinaryString(~1));
// prints "11111111111111111111111111111110"
यही है, एक दो के पूरक प्रतिनिधित्व, ~1 == -2
में अहस्ताक्षरित int
32-बिट के लिए।
अतिरिक्त पठन:
- Two's complement
- यह बिट्स में संख्यात्मक मूल्य पर हस्ताक्षर किए प्रतिनिधित्व करने के लिए (दूसरों के बीच) जावा सिस्टम है जिसका प्रयोग
- JLS 15.15.5 Bitwise complement operator
~
- "है कि ध्यान दें, सभी मामलों में,
~x
के बराबर होती है(-x)-1
"
- "है कि ध्यान दें, सभी मामलों में,
क्योंकि ~
बाइनरी उलटा नहीं है, यह थोड़ा सा उलटा है। बाइनरी इनवर्जन !
होगा और जावा (जावा में) केवल बूलियन मानों पर लागू किया जा सकता है।
मानक बाइनरी एन्कोडिंग में, 0 सभी 0s, ~
बिटवाई नहीं है। हस्ताक्षर पूर्णांक प्रकारों के लिए सभी 1s (अक्सर अक्सर) -1 है। तो एक हस्ताक्षरित बाइट प्रकार के लिए:
0xFF = -1 // 1111 1111
0xFE = -2 // 1111 1110
...
0xF0 = -128 // 1000 0000
0x7F = 127 // 0111 1111
0x7E = 126 // 0111 1110
...
0x01 = 1 // 0000 0001
0x00 = 0 // 0000 0000
यह द्विआधारी उलट है, और दूसरा पूरक में -1 है 0.
की बाइनरी उलट ~ 0x00000000 क्या आप वास्तव में क्या कह रहे हैं और कहा कि 0xFFFFFFFF में परिणाम है। जावा में एक (हस्ताक्षरित) int के लिए, इसका मतलब है -1।
~
थोड़ा सा ऑपरेटर है।
~0 = 1 which is -1 in 2's complement form
http://en.wikipedia.org/wiki/Two's_complement
दो के पूरक के रूप में कुछ संख्या और उनके बिट के लिहाज से नहीं ~
(सिर्फ उन्हें नीचे):
0 1 1 1 1 1 1 1 = 127
1 0 0 0 0 0 0 = -1280 1 1 1 1 1 1 0 = 126
1 0 0 0 0 1 = -1271 1 1 1 1 1 1 1 = -1
0 0 0 0 0 0 0 0 = 01 1 1 1 1 1 1 0 = -2
0 0 0 0 0 0 0 1 = 11 0 0 0 0 0 0 1 = -127
0 1 1 1 1 1 1 0 = 1261 0 0 0 0 0 0 0 = -128
0 1 1 1 1 1 1 1 = 127
+1। प्रोग्रामर जो पहेली करना पसंद करते हैं, यह पता लगा सकते हैं कि ~ कैसे काम करता है और कैसे दो पूरक आपके उदाहरण का ध्यानपूर्वक अध्ययन करने से काम करता है! –
0 यहां कुछ नहीं है। (00000000. बिटवाइज़ का उपयोग करना या हम 11111111. होगा यह है -1 के रूप में पूर्णांक पर हस्ताक्षर किए ...
32 बिट के साइन्ड इंटीजर
~00000000000000000000000000000000=11111111111111111111111111111111
के लिए है जो - -; यह एक बाइट है (या अधिक कम से कम) 1)
आप एक हस्ताक्षरित संख्या में पहली बिट की कल्पना कर सकते हैं - (2 x -1) जहां x बिट्स की संख्या है।
तो, एक 8 बिट संख्या, प्रत्येक बिट का मान (में सही क्रम से दाएं) दिया जाता है:
-128 64 32 16 8 4 2 1
अब, बाइनरी में, 0 स्पष्ट रूप से सभी 0s है:
-128 64 32 16 8 4 2 1
0 0 0 0 0 0 0 0 0 = 0
और जब आप बिटवाइज़ नहीं ~
कर इन 0s के प्रत्येक हो जाता है एक 1:
-128 64 32 16 8 4 2 1
~0 1 1 1 1 1 1 1 1
= -128+64+32+16+8+4+2+1 == -1
यह भी उपयोगी मैं है एन समझ ओवरफ्लो:
-128 64 32 16 8 4 2 1
126 0 1 1 1 1 1 1 0 = 126
+1 0 1 1 1 1 1 1 1 = 127
+1 1 0 0 0 0 0 0 0 = -128 overflow!
अधिक स्पष्ट उदाहरण, धन्यवाद! –
मुझे लगता है कि असली कारण यह है कि ~ दो के पूरक है।
जावास्क्रिप्ट दो के पूरक के लिए चरित्र टिल्डे, ~ को नामित करता है, भले ही अधिकांश प्रोग्रामिंग भाषाओं में टिल्डे किसी के पूरक के लिए थोड़ा टॉगल का प्रतिनिधित्व करता है।
- 1. डेल्फी निरंतर bitwise अभिव्यक्ति
- 2. AS3 bitwise शिफ्ट 0?
- 3. Arduino और Bitwise, अप्रत्याशित परिणाम
- 4. VB.NET में bitwise शिफ्ट कैसे करें?
- 5. एक्सएएमएल 'नहीं' ऑपरेटर?
- 6. पायथन ऑपरेटर, "नहीं"
- 7. अधिभारित ऑपरेटर नहीं मिला
- 8. बूलियन नहीं ऑपरेटर
- 9. को अदल-तालिका पंक्ति शैलियों बिटवाइज़ ऑपरेटर
- 10. !! सी ऑपरेटर, दो नहीं है?
- 11. अतिभारित ऑपरेटर फेंक नहीं अपवाद
- 12. क्या कोई मुझे एआरएम bitwise संचालन समझा सकता है?
- 13. intnt को UInt32 bitwise में डालने का सबसे तेज़ तरीका?
- 14. मुझे थोड़ा सा ऑपरेटर कब उपयोग करना चाहिए?
- 15. | ऑपरेटर बनाम || ऑपरेटर
- 16. % ऑपरेटर
- 17. '-' ऑपरेटर
- 18. क्यों बढ़ावा करता :: संस्करण प्रदान नहीं ऑपरेटर! =
- 19. ऑपरेटर && लागू नहीं किया जा सकता है
- 20. लिंक से एसक्यूएल "पसंद नहीं" ऑपरेटर
- 21. Grep या ऑपरेटर काम नहीं कर रहा
- 22. क्या regexp में कोई नहीं (!) ऑपरेटर है?
- 23. सी # सशर्त ऑपरेटर कोई वक्तव्य नहीं है?
- 24. ओकैमल में, सूची कन्स्ट्रक्टर :: ऑपरेटर नहीं है
- 25. लैम्ब्डा अभिव्यक्ति नहीं है ऑपरेटर मौजूद है?
- 26. आईएफ स्थितियों में ऑपरेटर का उपयोग नहीं
- 27. ऑपरेटर | =
- 28. संरचना भिन्नता ऑपरेटर (ऑपरेटर>)
- 29. ऑपरेटर =
- 30. ऑपरेटर
यदि आप एक बिट को फ़्लिप करना चाहते हैं, तो 'x^1' का उपयोग करें। – kennytm
यह 'नहीं' ऑपरेटर नहीं है। यह एक 'पूरक' ऑपरेटर है। – EJP
@EJP: ए *** एक *** पूरक ऑपरेटर। – kennytm