इस C # कोड को देखते हुए:
byte x = 1;
byte y = 2;
byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte'
byte
(या short
) प्रकारों पर किए गए किसी भी गणित के परिणाम को संक्षेप में एक पूर्णांक में डाल दिया जाता है। इसका परिणाम स्पष्ट रूप से परिणाम को बाइट में डालना है:
byte z = (byte)(x + y); // this works
मैं क्या सोच रहा हूँ क्यों? क्या यह वास्तु है? दार्शनिक?
हमारे पास है:
int
+int
=int
long
+long
=long
float
+float
=float
double
+double
=double
तो क्यों नहीं:
byte
+byte
=byte
short
+short
=short
?
पृष्ठभूमि की एक बिट: मैं "छोटी संख्या" (यानी <8) पर गणना की एक लंबी सूची का प्रदर्शन कर रहा हूं और एक बड़े सरणी में मध्यवर्ती परिणाम संग्रहीत कर रहा हूं। एक का उपयोग करना बाइट सरणी (के बजाय एक पूर्णांक सरणी) तेजी से होता है (क्योंकि कैश हिट फिल्मों में से)। लेकिन कोड के माध्यम से फैली हुई व्यापक बाइट-कास्ट इसे और अधिक अपठनीय बनाती हैं।
byte1 | byte2
उन्हें संख्या के रूप में मानने में बिलकुल नहीं है। यह उन्हें बिट्स के पैटर्न के रूप में सटीक रूप से व्यवहार कर रहा है। मैं आपकी बात समझता हूं, लेकिन ऐसा सिर्फ इसलिए होता है कि हर बार जब मैंने C # में बाइट्स पर कोई अंकगणित किया, तो मैं वास्तव में उन्हें बिट्स के रूप में मान रहा था, न कि संख्याओं के रूप में, और यह व्यवहार हमेशा से है।