सी # में संख्यात्मक अक्षर int
हैं, byte
नहीं (और बिट शिफ्ट का संकलन कंपाइलर द्वारा मूल्यांकन किया जाएगा, इसलिए केवल 510 अवशेष)। इसलिए आप byte
पर एक मान असाइन करने का प्रयास कर रहे हैं जो फिट नहीं है। आप 255:
byte b = (255 << 1) & 0xFF
परिणाम 8 बिट्स के परिणाम को कम करने के लिए मुखौटा कर सकते हैं। जावा के विपरीत, सी # ओवरफ्लक्टेड द्वारा ओवरफ्लो जाने की अनुमति नहीं देता है। मूल रूप से आपके पास बाइट को 510 असाइन करने का प्रयास करते समय दो समझदार विकल्प होंगे: या तो अधिकतम मूल्य पर क्लैंप करें, फिर आपको 255 मिलेंगे, या फिट बैठने वाली बिट्स को फेंक दें, इस मामले में आपको 254 मिलेंगे।
तुम भी unchecked
, lassevk mentioned के रूप में उपयोग कर सकते हैं:
byte b = unchecked((byte)(255 << 1));
मुझे यकीन नहीं है कि मैंने क्यों सोचा था कि 255 को 8 बिट –
के रूप में संग्रहीत किया जाएगा, ठीक है, 255 फिट बैठता है, उपर्युक्त सब कुछ नहीं है :) – Joey
यह ध्यान दिया जाना चाहिए, क्योंकि मुझे यहां किसी अन्य थ्रेड से धक्का दिया गया था, भले ही आपके पास दो बाइट हैं, उन पर कोई भी bitwise ऑपरेशन एक int वापस आ जाएगा। –