C # छोटा / लंबा / int शाब्दिक प्रारूप?


174

में सी / सी # / आदि आप संकलक बता सकता है कि एक शाब्दिक संख्या क्या यह प्रतीत होता है नहीं है (यानी,। floatबजाय double, unsigned longके बजाय int:

var d = 1.0; // double
var f = 1.0f; // float
var u = 1UL; // unsigned long

आदि।

क्या कोई मुझे इनकी सूची में ला सकता है? मैं विशेष रूप से shortया के लिए एक प्रत्यय की तलाश में हूं Int16




प्रतिक्रियाओं की झड़ी के बारे में बात करें ... सभी के लिए अपवोट्स।
डीप

जवाबों:


309
var d  = 1.0d;  // double
var d0 = 1.0;   // double
var d1 = 1e+3;  // double
var d2 = 1e-3;  // double
var f  = 1.0f;  // float
var m  = 1.0m;  // decimal
var i  = 1;     // int
var ui = 1U;    // uint
var ul = 1UL;   // ulong
var l  = 1L;    // long

मुझे लगता है कि यह सब है ... लघु / ushort / बाइट / sbyte के लिए कोई शाब्दिक विनिर्देश नहीं हैं


10
क्या इसका मतलब यह है कि आपको हर जगह कास्ट करना है जो आप शॉर्ट / यूथोर्ट / बाइट / सोबते का इस्तेमाल करते हैं? उदा .: somebyte = somebool? (बाइट) 1: ​​(बाइट) 0;
मोला

3
@ मोला, हां, जब तक कि वांछित प्रकार असंदिग्ध नहीं है (जैसे byte b = 42;)
थॉमस लेवेस्क

2
@ मोलाsomebyte = (byte)(somebool ? 1 : 0);
या

2
बस उस ऊपरी मामले को जोड़ने के लिए और इन शाब्दिक प्रत्ययों के निचले मामले समान हैं 1lऔर 1Lदोनों को लंबे पूर्णांक के रूप में माना जाएगा लेकिन निश्चित रूप 1Lसे अधिक पठनीय है 1l
आरबीटी

1
@DzmitryLahoda तुम्हारा क्या मतलब है? उस मुद्दे पर चर्चा किए गए प्रत्ययों को अभी तक लागू नहीं किया गया है।
थॉमस लेवेस्क

40

से §2.4.4.2 पूर्णांक शाब्दिक :

पूर्णांक शाब्दिक का प्रकार निम्नानुसार निर्धारित किया जाता है:

  • शाब्दिक कोई प्रत्यय है, यह इन प्रकार जिसमें अपने मूल्य दर्शाया जा सकता है की पहली है: int, uint, long, ulong
  • यदि शाब्दिक द्वारा प्रत्यय दिया गया है Uया u, इसमें इन प्रकारों में से पहला है जिसमें इसके मूल्य का प्रतिनिधित्व किया जा सकता है: uint, ulong
  • यदि शाब्दिक द्वारा प्रत्यय दिया गया है Lया l, इसमें इन प्रकारों में से पहला है जिसमें इसके मूल्य का प्रतिनिधित्व किया जा सकता है: long, ulong
  • शाब्दिक द्वारा प्रत्यय है, तो UL, Ul, uL, ul, LU, Lu, lU, या lu, यह इस प्रकार का है ulong

और §2.4.4.3 से वास्तविक शाब्दिक :

यदि कोई वास्तविक प्रकार प्रत्यय निर्दिष्ट नहीं है, तो वास्तविक शाब्दिक का प्रकार दोहरा है। अन्यथा, वास्तविक प्रकार प्रत्यय वास्तविक शाब्दिक के प्रकार को निर्धारित करता है, इस प्रकार है:

  • एक वास्तविक शाब्दिक Fया fप्रकार का है float। उदाहरण के लिए, शाब्दिक 1f, 1.5f, 1e10f, और 123.456Fके सभी प्रकार के होते हैं float
  • एक वास्तविक शाब्दिक Dया dप्रकार का है double। उदाहरण के लिए, शाब्दिक 1d, 1.5d, 1e10d, और 123.456Dके सभी प्रकार के होते हैं double
  • एक वास्तविक शाब्दिक Mया mप्रकार का है decimal। उदाहरण के लिए, शाब्दिक 1m, 1.5m, 1e10m, और 123.456Mके सभी प्रकार के होते हैं decimal। यह शाब्दिक सटीक मान लेकर दशमलव मान में परिवर्तित हो जाता है, और यदि आवश्यक हो, तो बैंकर के राउंडिंग (धारा 4.1.7) का उपयोग करके निकटतम प्रतिनिधित्व योग्य मूल्य पर राउंडिंग किया जाता है। शाब्दिक रूप से स्पष्ट कोई भी पैमाना तब तक संरक्षित रहता है जब तक कि मूल्य गोल न हो जाए या मूल्य शून्य न हो (जिसमें बाद वाला मामला साइन और स्केल 0 होगा)। इसलिए, 2.900mदशमलव को चिह्न 0, गुणांक 2900और पैमाने के साथ दशमलव बनाने के लिए पार्स किया जाएगा 3

9

यदि आपका चर पहले से छोटा नहीं है, तो आपको इसे स्पष्ट रूप से डालना होगा:

Object s = (Int16) 1;

5
साइड नोट: मुझे लगता है कि यह बॉक्सिंग रूपांतरण का कारण बनता है।
डी

6
यह मुक्केबाजी का कारण बनता है क्योंकि Int16 एक मूल्य प्रकार है और ऑब्जेक्ट एक संदर्भ प्रकार है।
स्कॉट मार्कस

3

शॉर्ट के लिए एक नहीं है। बस उपयोग करें short s = 1;


2
दिलचस्प बात यह संकलित करता है: short z1 = (0 == 1 ? 0 : 1); लेकिन यह नहीं है: short y = 1; short z2 = (0 == 1 ? 0 : y);(क्षमा करें, टिप्पणियों में कोई लाइन नहीं टूटती है)
yoyo

3
@ योयो: ऐसा इसलिए है क्योंकि 0यदि शाखा में असाइनमेंट से int पहले परिवर्तित किया जाता है z2। यदि आप shortअपनी शाखाओं में दो एस का उपयोग करते हैं, तो परिणाम फिर से होगा short। अगर / और के साथ, संकलक को पता नहीं चल सकता है कि आपका intप्रतिनिधित्व किया जा सकता है short
ओलिवर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.