दिलचस्प पोस्ट
तुलनित्र के रूप में सदस्य समारोह का उपयोग कर समस्या छँटाई स्विफ्ट: एक फ़ंक्शन वापस करने से पहले लोड करने के लिए Firebase की प्रतीक्षा करें जावा में विभिन्न प्रकार के थ्रेड-सुरक्षित सेट्स एएसपी.नेट पहचान (ओविन) का उपयोग करके फेसबुक की निजी जानकारी कैसे पहुंचेगी? कॉलिगनिटर लाइब्रेरी के रूप में मेलजेट एपीआई v3 रैपर को एकीकृत करना मैं उस बटन को कैसे प्राप्त करूं जिसने फ़ॉर्म को सबमिट करने से ईवेंट सबमिट किया? Const int *, const int * const और int const * के बीच अंतर क्या है? PrintWriter संलग्न विधि संलग्न नहीं है एंड्रॉइड स्टूडियो एक से अधिक पुस्तकालय परियोजनाओं से सिंगल एएआर को कैसे पैकेज करना है? मैक पर कस्टम बटन काम नहीं करते (बटनयूआई) मैं एक पायथन पैकेज के डेबियन पैकेजिंग कैसे करूं? गैर-उत्तरदायी साइट के लिए ट्विटर बूटस्ट्रैप 3 का उपयोग कैसे करें? एक कॉलम पर आधारित एक दो आयामी सरणी क्रमित करें एक एसोसिएटिव सरणी के माध्यम से कैसे लूप करें और कुंजी प्राप्त करें? एंड्रॉइड बटन को अक्षम कैसे करें?

पूर्णांक ब्लूज़ का सारांश, छोटी + = छोटी समस्या

प्रोग्राम सी #:

short a, b; a = 10; b = 10; a = a + b; // Error : Cannot implicitly convert type 'int' to 'short'. // we can also write this code by using Arithmetic Assignment Operator as given below a += b; // But this is running successfully, why? Console.Write(a); 

वेब के समाधान से एकत्रित समाधान "पूर्णांक ब्लूज़ का सारांश, छोटी + = छोटी समस्या"

यहां दो प्रश्न हैं पहला है "इंट में कम प्लस लघु परिणाम क्यों?"

ठीक है, समझे कि लघु प्लस लघु कम था और देखें कि क्या होता है:

 short[] prices = { 10000, 15000, 11000 }; short average = (prices[0] + prices[1] + prices[2]) / 3; 

और औसत, निश्चित रूप से, -9845 अगर यह गणना शॉर्ट्स में किया जाता है। यह योग सबसे बड़ा संभव लघु से बड़ा है, इसलिए यह नकारात्मक के आस-पास लपेटता है, और फिर आप नकारात्मक संख्या को विभाजित करते हैं।

ऐसी दुनिया में जहां पूर्णांक अंकगणित उसके चारों ओर लपेटते हैं, इंट में सभी गणना करने के लिए अधिक समझदार है, एक प्रकार है जो विशिष्ट गणना के लिए पर्याप्त सीमा तक पहुंचने की संभावना नहीं है।

दूसरा प्रश्न यह है:

  • लघु प्लस लघु int है
  • छोटा करने के लिए int निर्दिष्ट करना अवैध है
  • a + = b एक = a + b के समान है
  • इसलिए कम + = छोटा होना चाहिए अवैध
  • तो यह कानूनी क्यों है?

सवाल एक गलत आधार है; ऊपर की तीसरी पंक्ति गलत है धारा 7.17.2 में सी # विनिर्देशन

अन्यथा, यदि चयनित ऑपरेटर एक पूर्वनिर्धारित ऑपरेटर है, यदि चयनित ऑपरेटर का रिटर्न प्रकार स्पष्ट रूप से x के प्रकार के लिए परिवर्तनीय है, और यदि y परोक्ष रूप से एक्स के प्रकार के लिए परिवर्तनीय है या ऑपरेटर एक शिफ्ट ऑपरेटर है, तो ऑपरेशन एक्स = (टी) (एक्स ऑप्शन) के रूप में मूल्यांकन किया जाता है, जहां टी एक्स का प्रकार है, सिवाय इसके कि एक्स का मूल्यांकन केवल एक बार होता है

कंपाइलर आपकी ओर से कास्ट डालता है सही तर्क है:

  • लघु प्लस लघु int है
  • छोटा करने के लिए int निर्दिष्ट करना अवैध है
  • s1 + = s2 s1 = (छोटा) (s1 + s2) के समान है
  • इसलिए यह कानूनी होना चाहिए

अगर उसने आपके लिए कलाकारों को शामिल नहीं किया है तो कई प्रकारों पर मिश्रित कार्य का उपयोग करना असंभव होगा।

खैर, += ऑपरेटर कहता है कि आप a साथ एक मूल्य के मूल्य में वृद्धि करेंगे, जबकि = कहते हैं कि आप एक ऑपरेशन के परिणाम के साथ मूल्य को अधिलेखित करेंगे। ऑपरेशन a + b एक इंट उत्पन्न करता है, यह नहीं जानता कि यह अन्यथा कर सकता है, और आप उस इंट को एक छोटी के लिए निर्दिष्ट करने का प्रयास कर रहे हैं।

आपको इसका उपयोग करना होगा:

 a = (short)(a + b); 

असाइनमेंट और अतिरिक्त असाइनमेंट के व्यवहार के बीच अंतर के रूप में, मैं सोचता हूं कि इसके साथ कुछ करना है (एमएसडीएन से)

 x+=y is equivalent to x = x + y except that x is only evaluated once. The meaning of the + operator is dependent on the types of x and y (addition for numeric operands, concatenation for string operands, and so forth). 

हालांकि, यह थोड़ा अस्पष्ट है, इसलिए किसी और को गहरा समझ वाला कोई भी टिप्पणी कर सकता है।

ऐसा इसलिए होता है क्योंकि int न्यूनतम हस्ताक्षरित प्रकार है, जिसके लिए + परिभाषित किया गया है। कुछ छोटे को पहले int को बढ़ावा दिया जाता है += ऑपरेटर को + संबंध में परिभाषित किया गया है, लेकिन लक्ष्य के अनुरूप नहीं होने वाले परिणामों को संभालने के लिए एक विशेष-केस नियम के साथ।

ऐसा इसलिए है क्योंकि + = एक अतिभारित कार्य के रूप में कार्यान्वित किया जाता है (जिसमें से एक छोटा है, और संकलक सबसे विशिष्ट अधिभार चुनता है)। अभिव्यक्ति (ए + बी) के लिए, कम्पाइलर ने असाइन करने से पहले डिफ़ॉल्ट रूप से परिणाम int को बढ़ाया है।