JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ کاسٽنگ (تبديل) ابتدائي قسمون

جاوا ۾ کاسٽنگ (تبديل) ابتدائي قسمون

گروپ ۾ شايع ٿيل
سلام! JavaRush ذريعي وڃڻ دوران، توهان هڪ ڀيرو کان وڌيڪ ابتدائي قسمن ۾ آيا آهيو. هتي هڪ مختصر فهرست آهي جيڪو اسان انهن بابت ڄاڻون ٿا:
  1. اهي شيون نه آهن ۽ ميموري ۾ محفوظ ڪيل قدر جي نمائندگي ڪن ٿا
  2. ابتدائي قسم جا ڪيترائي قسم آھن:
    • سڄو نمبر - byte, short, int,long
    • فلوٽنگ پوائنٽ نمبر (فرڪشنل) - float۽double
    • بوليان -boolean
    • علامتي (اکر ۽ انگ ظاهر ڪرڻ لاءِ) -char
  3. انهن مان هر هڪ پنهنجي قدر جي حد آهي:
ابتدائي قسم ياداشت ۾ ماپ قدرن جي حد
بائيٽ 8 بٽ -128 کان 127 تائين
مختصر 16 بٽ -32768 کان 32767 تائين
چار 16 بٽ 0 کان 65536 تائين
int 32 بٽ -2147483648 کان 2147483647 تائين
ڊگهو 64 بٽ کان -9223372036854775808 کان 9223372036854775807
فلوٽ 32 بٽ (2 کان پاور تائين -149) تائين ((2-2 کان پاور -23) * 2 تائين پاور 127)
ٻيڻو 64 بٽ (-2 کان 63 جي طاقت تائين) (2 کان 63 جي طاقت تائين) - 1)
بولين 8 (جڏهن arrays ۾ استعمال ٿيندو آهي)، 32 (جڏهن غير arrays ۾ استعمال ٿيندو آهي) سچ يا ڪوڙ
پر، قدرن کان علاوه، قسمون به مختلف آهن ميموري سائيز ۾. intکان وڌيڪ وٺندو آهي byte. الف long- کان وڌيڪ short. پريميٽوز جي قبضي ۾ ڪيل ياداشت جي مقدار جو مقابلو نيسٽنگ ڊولز سان ڪري سگهجي ٿو: ابتدائي قسمن جي توسيع ۽ ڇڪڻ - 2 نيسٽنگ ڊول اندر خالي جاءِ آهي. جيتري وڏي نيڻ واري گڏي، اوتري وڌيڪ جاءِ. longاسان آساني سان هڪ ننڍڙي گڏي جي اندر رکي سگهون ٿا int. اهو آساني سان ٺهڪي اچي ٿو ۽ توهان کي ڪجهه اضافي ڪرڻ جي ضرورت ناهي. جاوا ۾، جڏهن پرائمري سان ڪم ڪري رهيا آهن، ان کي سڏيو ويندو آهي خودڪار تبديلي. ٻئي طريقي سان ان کي واڌارو سڏيو ويندو آهي. هتي هڪ سادي واڌ جو مثال آهي:
public class Main {

   public static void main(String[] args) {

       int bigNumber = 10000000;

       byte littleNumber = 16;

       bigNumber = littleNumber;
       System.out.println(bigNumber);
   }
}
هتي اسان byteمتغير کي هڪ قدر تفويض ڪريون ٿا int. تفويض ڪامياب ۽ بغير ڪنهن پريشاني جي هئي: ۾ ذخيرو ٿيل قدر ان جي ڀيٽ ۾ byteگھٽ ياداشت جي جاء تي قبضو ڪري ٿو ان جي ڀيٽ ۾ "فٽ" ۾ int. "ننڍي nesting گڏي" (قدر byte) آساني سان "وڏي matryoshka" (متغير int) ۾ فٽ ٿي. اهو هڪ ٻيو معاملو آهي جڏهن توهان سامهون ڪرڻ جي ڪوشش ڪندا آهيو - هڪ وڏي قيمت هڪ متغير ۾ وجهي جيڪا اهڙي سائيز لاءِ ٺهيل نه آهي. اصول ۾، هي چال حقيقي nesting گڏي سان ڪم نه ڪندو، پر جاوا ۾ اهو ڪم ڪندو، پر nuances سان. اچو ته هڪ قدر کي intمتغير ۾ رکڻ جي ڪوشش ڪريون short:
public static void main(String[] args) {

   int bigNumber = 10000000;

   short littleNumber = 1000;

   littleNumber = bigNumber;//error!
   System.out.println(bigNumber);
}
غلطي! گڏ ڪرڻ وارو سمجھي ٿو ته توھان ڪجھھ غير معياري ڪرڻ جي ڪوشش ڪري رھيا آھيو، ۽ ھڪڙي وڏي matryoshka doll ( int) ھڪڙي ننڍڙي ( short) جي اندر رکو. هن معاملي ۾ هڪ تاليف جي غلطي مرتب ڪندڙ کان هڪ ڊيڄاريندڙ آهي: " اي، ڇا توهان پڪ سان اهو ڪرڻ چاهيو ٿا؟ "جيڪڏهن توهان کي پڪ آهي ته، ان بابت مرتب ڪندڙ کي ٻڌايو: " سڀ ڪجهه ٺيڪ آهي، مون کي خبر آهي ته مان ڇا ڪري رهيو آهيان!" هن عمل کي چئبو آهي واضح قسم جي تبديلي، يا تنگ ڪرڻ . هڪ تنگ ڪرڻ لاء، توهان کي واضح طور تي ظاهر ڪرڻ جي ضرورت آهي ته توهان پنهنجي قيمت کي وڌائڻ چاهيو ٿا. ٻين لفظن ۾، مرتب ڪندڙ جي سوال جو جواب ڏيو: ” چڱو، تون هنن ننڍڙن گولين مان ڪهڙي وڏي گڏي ۾ رکڻ چاهين؟ "اسان جي صورت ۾ اهو هن طرح نظر ايندو:
public static void main(String[] args) {

   int bigNumber = 10000000;

   short littleNumber = 1000;

   littleNumber = (short) bigNumber;
   System.out.println(littleNumber);
}
اسان واضح طور تي اشارو ڪيو ته اسان قيمت کي intمتغير ۾ فٽ ڪرڻ چاهيون ٿا short۽ ان جي ذميواري وٺو. مرتب ڪندڙ، هڪ تنگ قسم جو واضح اشارو ڏسي، هڪ تبادلي کي انجام ڏئي ٿو. نتيجو ڇا ٿيندو؟ ڪنسول آئوٽ: -27008 ٿورڙو اڻڄاتل. بلڪل ائين ڇو؟ اهو اصل ۾ سادو آهي. اسان وٽ اصل قيمت هئي - 10000000 اهو هڪ متغير ۾ ذخيرو ٿيل هو intجنهن ۾ 32 بٽ هئا، ۽ بائنري شڪل ۾ اهو هن طرح نظر آيو: ابتدائي قسمن جي توسيع ۽ ڇڪڻ - 3 اسان هن قيمت کي متغير ڏانهن لکون ٿا short، پر اهو صرف 16 بٽ کي ذخيرو ڪري سگهي ٿو! ان مطابق، اسان جي نمبر جا صرف پهرين 16 بٽ اتي منتقل ڪيا ويندا، باقي رد ڪيا ويندا. نتيجي طور، variable shortقدر تي مشتمل هوندو ابتدائي قسمن جي توسيع ۽ ڇڪڻ - 4، جيڪو decimal شڪل ۾ بلڪل -27008 جي برابر هوندو آهي، اهو ئي سبب آهي ته مرتب ڪندڙ هڪ مخصوص قسم جي واضح ڪاسٽ جي صورت ۾ ”تصديق لاءِ پڇيو“. پهريون، اهو ڏيکاري ٿو ته توهان نتيجن جي ذميواري کڻندا آهيو، ۽ ٻيو، اهو مرتب ڪندڙ کي ٻڌائي ٿو ته ڪتب آڻيندڙ قسمن کي مختص ڪرڻ لاء ڪيتري جاء آهي. آخرڪار، جيڪڏهن آخري مثال ۾ اسان intٽائيپ ڪرڻ لاء کاسٽ ڪيو ها byte، ۽ نه short، اسان جي اختيار ۾ صرف 8 بٽ هجن ها، 16 نه، ۽ نتيجو مختلف هجي ها. جزوي قسمن لاءِ ( float۽ double)، تنگ ٿيڻ مختلف طرح سان ٿئي ٿو. جيڪڏهن توهان ڪوشش ڪندا ته اهڙي انگ کي انٽيجر جي قسم ۾ بدلائي، ان جو جزوي حصو رد ڪيو ويندو.
public static void main(String[] args) {

   double d = 2.7;

   long x = (int) d;
   System.out.println(x);
}
ڪنسول آئوٽ: 2

ڊيٽا جو قسم چار

توهان اڳ ۾ ئي ڄاڻو ٿا ته چار قسم انفرادي اکرن کي ظاهر ڪرڻ لاء استعمال ڪيو ويندو آهي.
public static void main(String[] args) {

   char c = '!';
   char z = 'z';
   char i = '8';

}
پر ان ۾ ڪجھ خاصيتون آھن جن کي سمجھڻ ضروري آھي. اچو ته ٻيهر ٽيبل تي قدر جي حدن سان ڏسو:
ابتدائي قسم ياداشت ۾ ماپ قدرن جي حد
بائيٽ 8 بٽ -128 کان 127 تائين
مختصر 16 بٽ -32768 کان 32767 تائين
چار 16 بٽ 0 کان 65536 تائين
int 32 بٽ -2147483648 کان 2147483647 تائين
ڊگهو 64 بٽ کان -9223372036854775808 کان 9223372036854775807
فلوٽ 32 بٽ (2 کان پاور تائين -149) تائين ((2-2 کان پاور -23) * 2 تائين پاور 127)
ٻيڻو 64 بٽ (-2 کان 63 جي طاقت تائين) تائين (2 کان 63 جي طاقت تائين) -1)
بولين 8 (جڏهن arrays ۾ استعمال ٿيندو آهي)، 32 (جڏهن غير arrays ۾ استعمال ٿيندو آهي) سچ يا ڪوڙ
ھن قسم جي charھڪڙي عددي حد آھي 0 کان 65536 تائين. پر اھو ڇا مطلب آھي؟ سڀ کان پوء، charاهي نه رڳو انگ آهن، پر خط پڻ آهن، اوقاف جا نشان ... حقيقت اها آهي ته قدر charجاوا ۾ يونيڪوڊ فارميٽ ۾ محفوظ ٿيل آهن. اسان اڳ ۾ ئي اڳئين ليڪچرن مان هڪ ۾ يونيڪوڊ کي منهن ڏئي چڪا آهيون. توهان کي شايد ياد هوندو ته يونيڪوڊ هڪ ڪردار انڪوڊنگ معيار آهي جنهن ۾ دنيا جي لڳ ڀڳ سڀني لکيل ٻولين جا اکر شامل آهن. ٻين لفظن ۾، هي خاص ڪوڊن جي هڪ فهرست آهي جنهن ۾ ڪنهن به ٻولي جي تقريبا ڪنهن به ڪردار لاء ڪوڊ آهي. عام يونيڪوڊ ٽيبل تمام وڏو آهي ۽ يقيناً، دل سان سکڻ جي ضرورت ناهي. هتي، مثال طور، ان جو هڪ ٽڪرو آهي: ابتدائي قسمن جي توسيع ۽ ڇڪڻ - 5 بنيادي شيء آهي قدرن جي اسٽوريج جي اصول کي سمجهڻ char، ۽ ياد رکو ته هڪ مخصوص علامت جي ڪوڊ کي ڄاڻڻ، توهان هميشه ان کي پروگرام ۾ حاصل ڪري سگهو ٿا. اچو ته ڪوشش ڪريون ڪجھ بي ترتيب نمبر سان:
public static void main(String[] args) {

   int x = 32816;

   char c = (char) x ;
   System.out.println(c);
}
ڪنسول آئوٽ: 耰 هي فارميٽ آهي جنهن ۾ جاوا ۾ اکر محفوظ ٿيل آهن char. هر ڪردار هڪ نمبر سان ملندو آهي - 16 بٽ جو عددي ڪوڊ، يا ٻه بائيٽ. يونيڪوڊ 32816 ڪردار 耰 سان ملندو آهي. هن موقعي تي ڌيان ڏيو. هن مثال ۾ اسان variable استعمال ڪيو int. اهو ميموري جي 32 بٽس تي قبضو ڪري ٿو ، جڏهن ته char16 . هتي اسان چونڊيو آهي ڇاڪاڻ ته اسان کي گهربل نمبر، 32816، حد کان ٻاهر آهي . جيتوڻيڪ سائيز ، مختصر وانگر، 16 بٽ آهي، رينج ۾ ڪوبه منفي نمبر نه آهن، تنهنڪري "مثبت" جي حد ٻه ڀيرا وڏي آهي (65536 بدران 32767 ). اسان استعمال ڪري سگهون ٿا ، جيستائين اسان جو ڪوڊ 65536 جي حد ۾ اچي ٿو. پر جيڪڏهن اسان هڪ نمبر ٺاهيندا آهيون ، اهو 16 بٽ کان وڌيڪ وٺندو. ۽ جڏهن قسمن کي تنگ ڪيو وڃي: intshortcharcharcharshortintint >65536
char c = (char) x;
اضافي بٽ رد ڪيا ويندا، ۽ نتيجو بلڪل غير متوقع ٿيندو.

چار ۽ عددن جي اضافي جون خاصيتون

اچو ته هن غير معمولي مثال کي ڏسو:
public class Main {

   public static void main(String[] args) {

      char c = '1';

      int i = 1;

       System.out.println(i+c);
   }
}
ڪنسول آئوٽ: 50 O_O منطق ڪٿي آهي؟ 1+1، 50 ڪٿان آيا؟! توهان اڳ ۾ ئي ڄاڻو ٿا ته قدر char0 کان 65536 جي حد تائين ميموري ۾ محفوظ ٿيل آهن، اسان جي ڪردار جي يونيڪوڊ جي نمائندگي ڪن ٿا. ابتدائي قسمن جي توسيع ۽ ڇڪڻ - 6 سو هتي آهي. جڏهن اسان اضافو ڪندا آهيون char۽ ڪجهه عددي قسم کي charان نمبر ۾ تبديل ڪيو ويندو آهي جيڪو يونيڪوڊ ۾ ان سان ملندو آهي. جڏهن اسان جي ڪوڊ ۾ اسان 1 ۽ '1' شامل ڪيو، علامت '1' ان جي ڪوڊ ۾ تبديل ٿي وئي، جيڪو 49 آهي (توهان مٿي ڏنل جدول ۾ چيڪ ڪري سگهو ٿا). تنهن ڪري، نتيجو 50 جي برابر ٿي ويو. اچو ته هڪ ڀيرو ٻيهر اسان جي پراڻي دوست کي مثال طور وٺون ، ۽ ان کي ڪجهه نمبر سان شامل ڪرڻ جي ڪوشش ڪريو.
public static void main(String[] args) {

   char c = '耰';
   int x = 200;

   System.out.println(c + x);
}
ڪنسول آئوٽ پُٽ: 33016 اسان اڳ ۾ ئي معلوم ڪري چڪا آهيون تهڪوڊ 32816 سان ملندڙ جلندڙ آهي. ۽ جڏهن اسان هن نمبر ۽ 200 کي شامل ڪندا آهيون ته اسان کي اسان جو پورو نتيجو ملندو آهي - 33016 :) آپريشن جو ميکانيزم، جيئن توهان ڏسي سگهو ٿا، بلڪل سادو آهي.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION