সি # সংক্ষিপ্ত / দীর্ঘ / অবধি আক্ষরিক বিন্যাস?


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 / বাইট / এসবিতে কোনও আক্ষরিক নির্দিষ্টকরণকারী নেই


10
এর অর্থ কি আপনি সংক্ষিপ্ত / ushort / বাইট / এসবিতে ব্যবহার করেন সেখানেই আপনাকে কাস্ট করতে হবে? উদাহরণস্বরূপ: একরূপে = কোনটি? (বাইট) 1: (বাইট) 0;
মোলা

3
@ মোলা, হ্যাঁ, যদি না কাঙ্ক্ষিত ধরণটি দ্ব্যর্থহীন হয় (যেমন byte b = 42;)
টমাস লেভস্ক

2
@ মোলাsomebyte = (byte)(somebool ? 1 : 0);
বা

2
শুধু যোগ করার জন্য যে বড় হাতের অক্ষরে এবং এই আক্ষরিক প্রত্যয় এর ছোট হাতের সমতুল্য যেমন হয় 1lএবং 1Lউভয় দীর্ঘ পূর্ণসংখ্যা হিসাবে গণ্য করা হবে কিন্তু অবশ্যই 1Lচেয়ে বেশি পাঠযোগ্য 1l
আরবিটি 3

1
@ ডিজিমিত্রি লাহোদা এই ইস্যুতে আলোচিত প্রত্যয়গুলি এখনও কার্যকর করা হয়নি।
টমাস লেভেস্ক

40

§2.4.4.2 থেকে পূর্ণসংখ্যার আক্ষরিক :

একটি পূর্ণসংখ্যার আক্ষরিকের ধরণটি নিম্নলিখিত হিসাবে নির্ধারিত হয়:

  • আক্ষরিক কোন প্রত্যয় থাকে, তবে তাতে এই ধরনের যা এর মান প্রতিনিধিত্ব করা যেতে পারে প্রথম আছে: int, uint, long, ulong
  • যদি আক্ষরিক দ্বারা প্রত্যয় হয় Uবা u, এর মধ্যে এই ধরণের প্রথমটি থাকে যার মানটির প্রতিনিধিত্ব করা যায়: uint, ulong
  • যদি আক্ষরিক দ্বারা প্রত্যয় হয় Lবা l, এর মধ্যে এই ধরণের প্রথমটি থাকে যার মানটির প্রতিনিধিত্ব করা যায়: long, ulong
  • আক্ষরিক দ্বারা suffixed করা হয়, তাহলে UL, Ul, uL, ul, LU, Lu, lU, অথবা lu, এটা ধরনের হয় ulong

এবং .42.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
অলিভার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.