मैं एक खुला स्रोत कोड का अध्ययन कर रहा है, जहां निम्न पंक्तिchar से byte को परिवर्तित करने के लिए कैसे?
stringBytes[i] = (byte) (stringChars[i] & 0x00FF);
कोई व्याख्या कर सकते हैं क्या वास्तव में इस लाइन में हो रहा है भर में आया था ???
मैं एक खुला स्रोत कोड का अध्ययन कर रहा है, जहां निम्न पंक्तिchar से byte को परिवर्तित करने के लिए कैसे?
stringBytes[i] = (byte) (stringChars[i] & 0x00FF);
कोई व्याख्या कर सकते हैं क्या वास्तव में इस लाइन में हो रहा है भर में आया था ???
चार में जावा में 2 बाइट होते हैं और निश्चित रूप से बाइट एकल बाइट होता है।
तो यह ऑपरेशन में:
stringBytes[i] = (byte) stringChars[i] & 0x00FF
एक चार मूल्य (16 बिट) किया जा रहा है संख्या 0x00FF के साथ द्विआधारी anded (बाइनरी: 0000 0000 1111 1111) यह एक बाइट बनाने के लिए।
8 0s and 8 1s
के साथ बाइनरी एंडिंग द्वारा आप मूल रूप से 8 मूल्यों को छोड़कर मुख्य मूल्य के सबसे बाएं या सबसे महत्वपूर्ण बिट्स (एमएसबी) को मास्क कर रहे हैं, इस प्रकार केवल 8 सही या कम से कम महत्वपूर्ण बिट्स (एलएसबी) बरकरार रहें। फिर कोड (byte)
का उपयोग करके बाइट को परिणामस्वरूप मान निर्दिष्ट कर रहा है, जो अन्यथा int
मान है।
0x00FF के साथ एंडिंग केवल अंतिम 8 महत्वपूर्ण बिट और शून्य अन्य बिट्स को बरकरार रखता है।
E.g.:
0xD2A5 & 0x00FF = 1101001010100101 & 0000000011111111 = 0000000010100101 = A5
मुझे यकीन है कि ए 5 वास्तव में 0xA5 होना चाहिए - बस स्थिरता के लिए। – Chexxor
'0x00FF' अनावश्यक है। –