Tiplarni tartiblash jarayonisiz short tipiga mos Qiymatni int tipiga moslab o’zlashtirish mumkinmi?
xqxQ23 operatorini boshQa usullar bilan yozib ko’ring.
Operatorolar afzalligi
2.3. tablitsada C# da Qo’laniladigan barcha opreatorlar yuQoridan past tomonga Qarab keltirilgan. Shuningdek keyinchalik tanishtiriladigan operatorlar xam ko’rsatib o’tilgan.
Tablitsa 2.3. C# operatorlarini afzalligi
Eng yuQori
() [] QQ (postfiks) -(postfiks) checked new
sizeof typeof unchecked
! - (cast) Q (unarli) -(unarli) QQ(prefiks) -(prefiks)
* G’ %
Q -
<<>>
<> - is
q q !q
&
^
!
&&
!!
?
q op q
Eng pastki
Ifoda Operatorlar, o’zgaruvchilar va literallar ifodaning tarkibiy Qismi xisoblanadi. Ifoda C# dasturlash tilida mazkur tarkibiy Qismlarning kombinatsiyasidan kelib chiQadi. Agar siz ozgina bo’lsa xam dasturlash bilan shug’ullangan bo’lsangiz (xech bo’lmaganda algebra bilan) buni sintaksisini keltirib chiQara olasiz. BiroQ ishlash jarayonida Quyida ta’kidlanadigan Qoidalarga amal Qilish zarur bo’ladi.
Ifodalarda tiplarni akslantirilishi Ifodalarda ikki va undan ortiQ tipli ma’lumotlarni birgalikda Qo’shish imkoniyati mavjud bo’lib, ular mutanosib xisoblanadi. Masalan siz Q va – son tipli ma’lumotlarni birgalikda Qo’shishingiz mumkin.
Akslantirish bevosita S# da Qabul Qilingan ifodalarda tiplarning avtomatik akslatirilishi Qoidasi asosida amalga oshadi. Quyida arifmetik operatsiyalar uchun mazkur Qoida asosidagi algoritm keltirilgan.
Agar bir operand decimal tipiga mansub bo’lsa, ikkinchi operand xam avtomatik tarzda decimal tipida akslantiradi.
Agar operandlardan biri double tipiga mansub bo’lsa, Qolgani xam avtomatik tarzda shu tipda akslantiriladi.
Agar operand float tipiga mansub bo’lsa, ikkinchisi xam avtomatik tarzda shu tipda akslantiriladi
Agar operandlardan biri along tipiga mansub bo’lsa, Qolgani xam avtomatik tarzda shu tipda akslantiriladi
Agar operand lera tipiga mansub bo’lsa, ikkinchi operand avtomatik tarzda long tipida akslantiriladi
Agar operandlardan biri long tipiga mansub bo’lsa, ikkinchi operand sb, te, short bo’lsa, barcha operandlar avtomatik tarzda long tipda akslantiriladi
Agar bir operand line tipiga mansub bo’lsa ikkinchi operand avtomatik tarzad int tipida akslantiriladi.
Agar yuQoridagi Qoidalardan chetga chiQish xolatlari bo’lsa, ikkala operand xam short tipida akslantiriladi.
YUQorida keltirilgan avtomatik tarzda akslantirish Qoidalariga e’tibor Qarating. Barcha tipli ma’lumotlar xam bir-iri bilan mutanosib bo’lavermaydi. Bularga misol Qilib float va decimal tiplarini olish mumkin. Agar oxirgi Qoidaga e’tibor Qaratsangiz, mabodo biror bir Qoidaga mos tushmaydigan vaziyatlarda ikkala operandlar xam avtomatik tarzda int tipiga o’tkaziladi. char, sbyte, short, tipiga mansub Qiymatlar ifodada int tipiga o’tkaziladi. Bu protsess butunsonli tiplarning avtomatik tarzdagi akslantirilishi deb nomlanadi. Bu esa barcha matematik operatsiyalarning natijasi bitdan kam xolda saQlovchi tipga mansub ekanligini anglatadi.
Shuni yoddan ko’tarmaslik kerakki, avtomatik akslantirish jarayonida kutilmagan natijalar xam kelib chiQishi mumkin. Masalan byte tiplari o’rtasida o’tkazilayotgan arifmetik operatsiyada natijani int tipiga o’tganligini kuzatish mumkin. Bu esa umuman kutilmagan natijadir. Chunki dasturlovchi o’zgaruvchilar tipini boshQarishi zarurdir. Butunsonlar tiplarini avtomatik tarzda akslantirish Qoidasini Quyidagi dastur orQali ko’rish mumkin.
Agar bo’lish ifodasi b * b 1 o’zgartiruvchi bilan o’zlashtirilganda tiplarni tartiblash talab Qilinmaydi. Chunki b o’zgartiruvchisini bo’lish jarayonida avtomatik tarzda int tipiga o’zgartiriladi. Mabodo siz b * b o’zgaruvchisini b tarzida o’zlashtirmoQchi bo’lsangiz mazkur tipni teskari tartibda byte tipiga o’tkazish zarur bo’ladi. Shuni esdan chiQarmaslik kerakki, agar protsess davomida kutilmagan natija olinsa bu ifodadagi tiplarning nomutanosibligidandir. Bu xolat ko’pincha char tipi bilan ishlayotgan paytda yuzaga keladi. Masalan Quyidagi kod fragmentida char tipini natijalarini int tipiga aylantirilishini talab Qiladi.
char ch1 – ‘a’, ch2 – ‘b’;
(ch1-(char)’ch1’ – ch2);
Tipni tartiblashsiz ch1 va ch2 o’zgaruvchilarini ko’paytirish natijasida xosil bo’lgan Qiymat int tipiga aylanadi, lekin o’zgaruvchilar char tipi tarzida o’zlashtirilmaydi.
Tiplarni tartiblash faQatgina tiplarni o’zlashtirish jarayonida tiplarni akslantirish uchungina kerak bo’lmaydi. Masalan Quyidagi dasturda ifodani mayda natijalari uning double tipiga o’tkazilishini talab Qiladi. Agar shunday Qilinmasa double tipi int tipiga ega bo’lardi va ma’lumotning yo’Qolishiga olib keladi.
G’G’ mazkur dasturda ifodani hisoblash jarayonida tiplarni G’G’ tartiblash keltirilgan
using System
class UseCastpublic static void Main () {
int 1;
or (1 – 0; 1 < 5; 1 QQ)
Console.WriteLine( ‘ifodaning butunsonli natijasi’ -1Q”G’3: “ Q - G’3 );
Console.WriteLine (‘ifodaning mayda natijasi’) [0:#,##]”, (double) 1G’3;
Console.WriteLine ();
Quyida mazkur dasturni bajarilishi ko’rsatilgan.
Ifodani xisoblash natijasida xosil bo’lgan butun sonli natijasi 0G’3: 0
Ifodani xisoblash natijasida xosil bo’lgan QoldiQ sonli natijasi
Ifodani xisoblash natijasida xosil bo’lgan butun sonli natijasi 1G’3: 0
Ifodani xisoblash natijasida xosil bo’lgan QoldiQ sonli natijasi .33
Ifodani xisoblash natijasida xosil bo’lgan butun sonli natijasi 2G’3: 0
Ifodani xisoblash natijasida xosil bo’lgan QoldiQ sonli natijasi .67
Ifodani xisoblash natijasida xosil bo’lgan butun sonli natijasi 3G’3: 1
Ifodani xisoblash natijasida xosil bo’lgan QoldiQ sonli natijasi .1
Ifodani xisoblash natijasida xosil bo’lgan butun sonli natijasi 4G’3: 1
Ifodani xisoblash natijasida xosil bo’lgan QoldiQ sonli natijasi 1.33