CodeGym /جاوا بلاگ /Random-SD /ابتدائي قسمن جي وسيع ۽ تنگ ڪرڻ
John Squirrels
سطح
San Francisco

ابتدائي قسمن جي وسيع ۽ تنگ ڪرڻ

گروپ ۾ شايع ٿيل
سلام جئين توهان CodeGym ذريعي ترقي ڪئي آهي، توهان کي ڪيترائي ڀيرا ابتدائي قسمن جو سامنا ڪيو آهي. هتي هڪ مختصر فهرست آهي جيڪو اسان انهن بابت ڄاڻون ٿا:
  1. اهي شيون نه آهن ۽ ميموري ۾ محفوظ ڪيل قدر جي نمائندگي ڪن ٿا
  2. اتي ڪيترائي قسم آهن
    • سڄو نمبر: بائيٽ ، ننڍو ، int ، ڊگهو
    • فلوٽنگ پوائنٽ (فرڪشنل) انگ: فلوٽ ۽ ڊبل
    • منطقي قدر: boolean
    • علامتي قدر (اکر ۽ انگن جي نمائندگي ڪرڻ لاء): چار
  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 (جيڪڏهن صفن ۾ استعمال نه ڪيو وڃي) سچ يا ڪوڙ
پر مختلف قدرن سان گڏ، اهي پڻ مختلف آهن ته اهي ياداشت ۾ ڪيتري جاء تي قبضو ڪن ٿا. هڪ int هڪ بائيٽ کان وڌيڪ وٺندو آهي. ۽ ڊگھو آھي ننڍو کان وڏو. پريميٽوز جي قبضي ۾ ڪيل ياداشت جي مقدار جو مقابلو روسي نيسٽنگ ڊولز سان ڪري سگهجي ٿو: ابتدائي قسمن جي ويڪرائي ۽ تنگ ڪرڻ - 2 هر nesting گڏي جي اندر جاءِ موجود هوندي آهي. جيتري وڏي نيسٽنگ ڊول، اوتري وڌيڪ جاءِ هوندي. هڪ وڏي nesting گڏي ( ڊگهي ) آساني سان هڪ ننڍي int کي گڏي . اهو آساني سان ٺهڪي اچي ٿو ۽ توهان کي ٻيو ڪجهه ڪرڻ جي ضرورت ناهي. جاوا ۾، جڏهن پرائمري سان ڪم ڪندي، ان کي سڏيو ويندو آهي ضمني تبديلي. يا مختلف طرح سان، ان کي سڏيو ويندو آهي وسيع ڪرڻ.

جاوا ۾ وسيع ٿيڻ

ھتي ھڪڙو سادو مثال آھي ھڪڙي وڌائڻ واري تبديلي جو:
public class Main {

   public static void main(String[] args) {

       int bigNumber = 10000000;

       byte littleNumber = 16;

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

   int bigNumber = 10000000;

   short littleNumber = 1000;

   littleNumber = bigNumber;// Error!
   System.out.println(bigNumber);
}
غلطي! گڏ ڪرڻ وارو سمجھي ٿو ته توھان ڪجھھ غير معمولي ڪرڻ جي ڪوشش ڪري رھيا آھيو ھڪڙي وڏي نيسٽنگ ڊول ( int ) کي ھڪڙي ننڍڙي ( short ) اندر ڇڪيندي . انهي صورت ۾، تاليف جي غلطي مرتب ڪندڙ کان هڪ ڊيڄاريندڙ آهي: "اي، ڇا توهان بلڪل پڪ آهي ته توهان اهو ڪرڻ چاهيو ٿا؟" جيڪڏهن توهان پڪ آهيو، ته پوء توهان مرتب ڪندڙ کي ٻڌايو: "سڀ ڪجهه ٺيڪ آهي. مون کي خبر آهي ته مان ڇا ڪري رهيو آهيان!" ھن عمل کي چئبو آھي واضح قسم جي تبديلي، يا تنگ ڪرڻ.

جاوا ۾ تنگ ٿيڻ

هڪ تنگ تبديلي کي انجام ڏيڻ لاء، توهان کي واضح طور تي ظاهر ڪرڻ جي ضرورت آهي ته توهان پنهنجي قيمت کي تبديل ڪرڻ چاهيو ٿا. ٻين لفظن ۾، توهان کي گڏيندڙ جي سوال جو جواب ڏيڻ جي ضرورت آهي: "خير، توهان انهن ننڍڙن ننڍڙن گولن مان ڪهڙي وڏي نيسٽنگ گڏي ۾ رکڻ چاهيو ٿا؟" اسان جي حالت ۾، اهو هن طرح نظر اچي ٿو:
public static void main(String[] args) {

   int bigNumber = 10000000;

   short littleNumber = 1000;

   littleNumber = (short) bigNumber;
   System.out.println(littleNumber);
}
اسان واضح طور تي ظاھر ڪريون ٿا ته اسان ھڪڙي int کي مختصر متغير ۾ رکڻ چاھيون ٿا ۽ اسان ذميواري کڻنداسين. اهو ڏسي ٿو ته هڪ تنگ قسم کي واضح طور تي ظاهر ڪيو ويو آهي، مرتب ڪندڙ تبديلي کي انجام ڏئي ٿو. نتيجو ڇا نڪتو؟ ڪنسول آئوٽ: -27008 اهو ٿورڙو غير متوقع هو. ڇو ته اسان اهو حاصل ڪيو؟ حقيقت ۾، اهو سڀ ڪجهه بلڪل سادو آهي. اصل ۾، قيمت 10000000 هئي اهو هڪ int متغير ۾ محفوظ ڪيو ويو، جيڪو 32 بٽس تي قبضو ڪري ٿو. هي ان جي بائنري نمائندگي آهي:
ابتدائي قسمن جي ويڪرائي ۽ تنگ ڪرڻ - 3
اسان هن قيمت کي هڪ مختصر متغير ۾ لکون ٿا، جيڪو صرف 16 بٽس کي محفوظ ڪري سگهي ٿو! ان جي مطابق، اسان جي نمبر جا صرف پهرين 16 بٽ اتي منتقل ڪيا ويندا. باقي ڇڏيا ويندا. نتيجي طور، مختصر متغير ھيٺ ڏنل قدر حاصل ڪري ٿو
ابتدائي قسمن جي ويڪرائي ۽ تنگ ڪرڻ - 4
جيڪا ڊيسيمل فارم ۾ -27008 جي برابر آهي، اهو ئي سبب آهي ته ڪمپلر توهان کي "تصديق" ڪرڻ لاءِ پڇي ٿو هڪ خاص قسم جي واضح تنگ ڪنورشن کي اشارو ڪندي. پهريون، اهو ڏيکاري ٿو ته توهان نتيجن جي ذميواري وٺي رهيا آهيو. ۽ ٻيو، اهو مرتب ڪندڙ کي ٻڌائي ٿو ته ڪيتري جاءِ مختص ڪرڻي آهي جڏهن بدلائي ٿئي ٿي. آخرڪار، آخري مثال ۾، جيڪڏهن اسان هڪ int قدر مقرر ڪيو بائيٽ متغير کي مختصر جي بجاءِ ، پوءِ اسان وٽ صرف 8 بٽ هوندا، نه 16، ۽ نتيجو مختلف هوندو. جزوي قسمون ( فلوٽ ۽ ڊبل ) کي محدود تبديلين لاءِ پنهنجو عمل آهي. جيڪڏهن توهان هڪ عددي نمبر کي انٽيجر جي قسم ۾ ڪاسٽ ڪرڻ جي ڪوشش ڪندا، جزوي حصو رد ڪيو ويندو.
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 (جيڪڏهن صفن ۾ استعمال نه ڪيو وڃي) سچ يا ڪوڙ
رينج 0 کان 65536 تائين چار قسم لاء اشارو ڪيو ويو آهي. پر ان جو مطلب ڇا آهي؟ سڀ کان پوء، هڪ چار صرف انگن اکرن جي نمائندگي نٿو ڪري، پر اکر، اوقاف جا نشان پڻ ... شيء اها آهي ته جاوا ۾ چار قدر يونيڪوڊ فارميٽ ۾ ذخيرو ٿيل آهن. اسان اڳ ۾ ئي يونيڪوڊ کي اڳئين سبقن مان هڪ ۾ ڏٺو آهي. توهان کي شايد ياد هجي ته يونيڪوڊ هڪ ڪردار انڪوڊنگ معيار آهي جنهن ۾ دنيا جي لڳ ڀڳ سڀني لکيل ٻولين جا نشان شامل آهن. ٻين لفظن ۾، اها خاص ڪوڊس جي هڪ فهرست آهي جيڪا ڪنهن به ٻولي ۾ تقريبن هر ڪردار جي نمائندگي ڪري ٿي. سڄو يونيڪوڊ ٽيبل تمام وڏو آهي، ۽ يقيناً، ان کي دل سان سکڻ جي ڪا ضرورت ناهي. هتي ان جو هڪ ننڍڙو حصو آهي: ابتدائي قسمن جي ويڪرائي ۽ تنگ ڪرڻ - 5 بنيادي شيء اهو سمجهڻ آهي ته اکر ڪيئن ذخيرو ٿيل آهن، ۽ ياد رکڻ لاء ته جيڪڏهن توهان کي ڪنهن خاص ڪردار لاء ڪوڊ ڄاڻو ٿا، توهان هميشه پنهنجي پروگرام ۾ اهو ڪردار پيدا ڪري سگهو ٿا. اچو ته ڪجھ بي ترتيب نمبر سان ڪوشش ڪريون:
public static void main(String[] args) {

   int x = 32816;

   char c = (char) x ;
   System.out.println(c);
}
ڪنسول آئوٽ: 耰 هي فارميٽ آهي چار s کي جاوا ۾ ذخيرو ڪرڻ لاءِ. هر علامت هڪ عدد سان ملندڙ جلندڙ آهي: هڪ 16-bit (ٻه بائيٽ) عددي ڪوڊ. يونيڪوڊ ۾، 32816 چيني اکر 耰 سان ملندو آهي. ھيٺ ڏنل نقطي کي نوٽ ڪريو. هن مثال ۾، اسان هڪ int متغير استعمال ڪيو. اهو ميموري ۾ 32 بٽ رکي ٿو، جڏهن ته هڪ چار 16 تي قبضو ڪري ٿو. هتي اسان هڪ int چونڊيو آهي، ڇاڪاڻ ته اسان جو نمبر (32816) مختصر ۾ نه هوندو . جيتوڻيڪ هڪ چار جي سائيز (صرف هڪ مختصر وانگر) 16 بٽ آهي، چار جي حد ۾ ڪي به منفي نمبر نه آهن ، تنهنڪري چار جي حد جو "مثبت" حصو ٻه ڀيرا وڏو آهي ( شارٽ قسم لاء 32767 بدران 65536 ) . اسان هڪ int استعمال ڪري سگهون ٿا جيستائين اسان جو ڪوڊ 65536 کان هيٺ رهي. پر جيڪڏهن توهان 65536 کان وڌيڪ int ويليو ٺاهيندا ته پوءِ اهو 16 بٽس کان وڌيڪ قبضو ڪندو. ۽ اهو نتيجو ٿيندو هڪ تنگ تبديلي
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_О اهو ڪيئن سمجھي ٿو؟ 1+1. 50 ڪٿان آيا؟! توهان اڳ ۾ ئي ڄاڻو ٿا ته charقيمتون ميموري ۾ 0 کان 65536 جي حد تائين نمبرن جي طور تي ذخيرو ٿيل آهن، ۽ اهي انگ اکر جي يونيڪوڊ نمائندگي آهن. ابتدائي قسمن جي ويڪرائي ۽ تنگ ڪرڻ - 6 جڏهن اسان هڪ چار ۽ ڪجهه مڪمل-نمبر جو قسم شامل ڪندا آهيون، چار کي لاڳاپيل يونيڪوڊ نمبر ۾ تبديل ڪيو ويندو آهي. اسان جي ڪوڊ ۾، جڏهن اسان 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