এই সি # কোডটি দেখছেন:
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) গণনার দীর্ঘ তালিকা সম্পাদন করছি এবং মধ্যবর্তী ফলাফলগুলি একটি বৃহত অ্যারেতে সংরক্ষণ করছি। বাইট অ্যারে ব্যবহার করা (কোনও int অ্যারের পরিবর্তে) দ্রুত (ক্যাশে হিটগুলির কারণে ) is তবে কোডের মাধ্যমে ছড়িয়ে থাকা বিস্তৃত বাইট-কাস্টগুলি এটিকে আরও বেশি অপঠনযোগ্য করে তুলেছে।
byte1 | byte2
সংখ্যা হিসাবে মোটেও আচরণ করে না। এটি বিটের নিদর্শন হিসাবে তাদের সাথে নিখুঁতভাবে আচরণ করছে। আমি আপনার দৃষ্টিকোণটি বুঝতে পারি, তবে এটি ঠিক তাই ঘটে যায় যে প্রতিবার আমি সি # তে বাইটগুলিতে কোনও পাটিগণিত করেছি, আমি আসলে তাদের সংখ্যা হিসাবে নয়, বিট হিসাবে গণ্য করি এবং এই আচরণটি সর্বদা পথে থাকে।