short BitwiseTest(short value)
{
short test1 = ((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return (test1 | test2);
}
उपर्युक्त कोड एक (अक्षम) उदाहरण है जो सी # में एक छोटे (हस्ताक्षरित 16-बिट पूर्णांक) की अंतहीनता को स्वैप करता है।सी # बिटवाई ऑपरेशंस - एक इंट क्यों डाला गया?
हालांकि इसके बाद के संस्करण कोड संकलन नहीं होगा सी # परोक्ष निम्नलिखित लाइनों के दोनों पर एक पूर्णांक के लिए एक छोटी से कास्टिंग है क्योंकि:
पहला मामला:
short test1 = ((value >> 8) & 0xFF);
दूसरा मामला:
return (test1 | test2);
यह कलाकार क्यों हो रहा है? क्या मैं अपेक्षाकृत परिणाम को कम से कम वापस लाकर प्राप्त करूंगा? इस तरह:
short BitwiseTest2(short value)
{
short test1 = (short)((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return ((short)(test1 | test2));
}
यदि नहीं क्यों?
ध्यान दें कि मुझे समझ में आता है कि बाएं बिट-शिफ्ट करने पर सी # एक पूर्णांक के लिए छोटा क्यों होता है, इसलिए test2 चर का असाइनमेंट।
मैं शायद मैं स्पष्टीकरण दें कि मैं जवाब मिल नहीं है चाहिए डुप्लीकेट के रूप में बंद करने के लिए वोट नहीं किया है, लेकिन यह काफी http://stackoverflow.com/questions/941584 –
के समान है ले लो प्रासंगिक के बारे में मौजूदा प्रश्नों के लिए प्रासंगिक। अतिरिक्त के साथ ओवरफ्लो की संभावना है, जैसा कि test2 के असाइनमेंट के साथ है। मैं उन परिस्थितियों को समझता हूं। हालांकि दो स्थितियों में मैंने रेखांकित किया है कि अतिप्रवाह की कोई संभावना नहीं है। –