मूल प्रश्न में स्पष्ट प्रश्न (CHAR_BIT क्या है) और अंतर्निहित प्रश्न (यह काम कैसे करता है) दोनों का उत्तर देने की कोशिश की जा रही है।
C और C ++ में एक चार्ट स्मृति की सबसे छोटी इकाई का प्रतिनिधित्व करता है जिसे C प्रोग्राम संबोधित कर सकता है *
C और C ++ में CHAR_BIT एक चार्ट में बिट्स की संख्या का प्रतिनिधित्व करता है। चार्ट प्रकार पर अन्य आवश्यकताओं के कारण इसे हमेशा कम से कम 8 होना चाहिए। सभी आधुनिक सामान्य प्रयोजन के कंप्यूटरों पर व्यवहार में यह ठीक 8 है, लेकिन कुछ ऐतिहासिक या विशेषज्ञ प्रणालियों में उच्च मूल्य हो सकते हैं।
Java में CHAR_BIT या sizeof का कोई समतुल्य नहीं है, इसकी कोई आवश्यकता नहीं है क्योंकि Java में सभी आदिम प्रकार निश्चित आकार के हैं और ऑब्जेक्ट की आंतरिक संरचना प्रोग्रामर के लिए अपारदर्शी है। यदि इस कोड का जावा में अनुवाद किया जाए तो आप निश्चित मूल्य 31 के द्वारा "sizeof (int) * CHAR_BIT - 1" को बदल सकते हैं।
इस विशेष कोड में इसका उपयोग एक इंट में बिट्स की संख्या की गणना करने के लिए किया जा रहा है। विदित हो कि यह गणना मानती है कि इंट प्रकार में कोई पेडिंग बिट्स नहीं है।
यह मानते हुए कि आपका संकलक हस्ताक्षरित संख्याओं की बिट शिफ्ट पर विस्तार करना चुनता है और यह मानकर कि आपका सिस्टम नकारात्मक संख्याओं के लिए 2s पूरक प्रतिनिधित्व का उपयोग करता है, इसका मतलब है कि "MASK" सकारात्मक या शून्य मान के लिए 0 और नकारात्मक मान के लिए -1 होगा।
एक टोमस पूरक संख्या को नकारने के लिए हमें एक बिटवाइज़ प्रदर्शन करने की आवश्यकता होती है और फिर एक को जोड़ने की। समान रूप से हम एक को घटा सकते हैं और फिर बिटवाइज इसे नकार सकते हैं।
फिर से मान लेते हैं कि टोट्स सप्लीमेंट प्रतिनिधित्व -1 सभी लोगों द्वारा दर्शाया गया है, इसलिए अनन्य या -1 के साथ बिटवाइज निषेध के बराबर है।
तो जब v शून्य है तो संख्या अकेले रह जाती है, जब v एक होता है तो इसे नकार दिया जाता है।
कुछ के बारे में पता है कि C और C ++ में हस्ताक्षरित अतिप्रवाह अपरिभाषित व्यवहार है। इसलिए सबसे नकारात्मक मूल्य पर इस एबीएस कार्यान्वयन का उपयोग करने से अपरिभाषित व्यवहार होता है। इस तरह के कलाकारों को जोड़कर तय किया जा सकता है कि कार्यक्रम की अंतिम पंक्ति का मूल्यांकन अहस्ताक्षरित इंट में किया गया है।
* जो आमतौर पर होता है लेकिन nesacerally स्मृति की सबसे छोटी इकाई के समान नहीं है जिसे हार्डवेयर संबोधित कर सकता है। एक कार्यान्वयन संभावित रूप से प्रोग्राम-एड्रेसेबल मेमोरी की एक इकाई में हार्डवेयर-एड्रेसेबल मेमोरी की कई इकाइयों को जोड़ सकता है या प्रोग्राम-एडरेसेबल मेमोरी की कई यूनिटों में हार्डवेयर एड्रेस करने योग्य मेमोरी की एक यूनिट को विभाजित कर सकता है।