CodeGym /جاوا بلاگ /Random-SD /جاوا ۾ لانگ کي int ۾ ڪيئن بدلجي
John Squirrels
سطح
San Francisco

جاوا ۾ لانگ کي int ۾ ڪيئن بدلجي

گروپ ۾ شايع ٿيل
هن آرٽيڪل ۾، اسان وضاحت ڪرڻ وارا آهيون ته ڪيئن لانگ کي جاوا ۾ int ۾ تبديل ڪيو وڃي ۽ ڪجهه ڪوڊ مثال لکي. ڇاڪاڻ ته long هڪ وڏو ڊيٽا قسم آهي int کان ، هتي اسان کي استعمال ڪرڻ گهرجي ٽائپ ڪاسٽنگ اهڙي تبديليءَ لاءِ. جيئن ته توهان شايد پهريان ئي ڄاڻو ٿا ته جاوا ۾ ڊگهو ۽ انٽ ٻنهي پرائمري ڊيٽا جا قسم آهن. مطلب ته اهي طبقاتي شيون نه آهن. سڀ شيون ۽ صفون Heap Space ۾ محفوظ ڪيون وينديون آهن جڏهن ته پرائمري قسمون جهڙوڪ int ۽ long اسٽيڪ ميموري ۾ محفوظ ڪيون وينديون آهن. ڊگھو ۽ int ڪجھه ساڳيا آھن. انٽيجر جو مطلب آهي پورو نمبر، جيڪو ٿي سگهي ٿو مثبت، منفي يا صفر. ٻئي ڊگها ۽ انٽ انٽيجر جا قسم آهن، تنهن ڪري اهي هڪ طريقي سان مطابقت رکن ٿا. مسئلو اهو آهي، ته ڊگھي قسم جي حد -263 کان 263 - 1، يا -9223372036854775808 کان 9223372036854775807 تائين آهي. اهو آهي، جاوا پروگرام هڪ ڊگهي قسم لاء 64 بٽ مختص ڪري ٿو. ساڳئي وقت، int قسم 32 بٽ تي قبضو ڪري ٿو، جنهن ۾ توهان نمبر رکي سگهو ٿا -231 کان 231 - 1 يا، جيڪو ساڳيو آهي، -2147483648 کان 2147483647 تائين. ان جو مطلب آهي ته int قسم جو ڪو به نمبر آساني سان هڪ ۾ فٽ ٿي سگهي ٿو. ڊگهو قسم. جاوا ۾، جڏهن پرائمري سان ڪم ڪري رهيا آهن، هڪ تنگ قسم کان وڏي قسم ۾ تبديلي خودڪار آهي. ٻئي طريقي سان، ان کي وسيع سڏيو ويندو آهي.
int myInt= 18;
long myLong= 16000;
       myLong = myInt;
هتي اسان هڪ ڊگهو متغير کي int تفويض ڪري رهيا آهيون . سڀ ڪجھ ٺيڪ ٿي ويو، ھڪڙي وڏي رينج ۾، ھڪڙو ننڍڙو خاموشيء سان ٺھيل آھي ۽ اسان کي يادگيري جي جاء کان سواء ٻيو ڪجھ به نه وڃايو. رستي ۾، جڏهن اسان ڊگهي قسم جي هڪ متغير کي بيان ڪريون ٿا ۽ ان جي قيمت کي بيان ڪريون ٿا، اهو بهتر آهي ته ان کي خط l تفويض ڪريو ، اهو ڪارائتو ٿيندو جڏهن اسان int جي حد کان ٻاهر نمبرن سان ڪم ڪنداسين.
long myVeryLong = 10000000000l;

جاوا لانگ کان int ڪنورشن

ھاڻي اچو ته ھن مضمون جي مکيه ڪم ڏانھن واپس وڃو - Java long to int conversion. مسئلو اهو آهي ته ڪا وڏي شيءِ هميشه ننڍي شيءِ ۾ نه ايندي آهي. تنهنڪري هتي اسان جاوا ۾ پاڻمرادو ”ننڍو“ کي ”وڏي“ ۾ نه ٿا وجهي سگهون. جيڪڏهن اسان ڪوشش ڪريون ته جيئن اڳئين مثال ۾، پر ان جي برعڪس:
//example without typecasting…nice trying!
public static void main(String[] args) {

int myInt= 18;
long myLong= 16000;
       myInt = myLong;
}
جاوا ڪمپلر صرف اسان کي اهو ڪرڻ نه ڏيندو ۽ هڪ غلطي اڇلائي ڇڏيندو. تنهن ڪري هن آپريشن لاء، اسان کي استعمال ڪرڻ جي ضرورت آهي جنهن کي ٽائپ ڪاسٽنگ سڏيو ويندو آهي. اهو عمل تنگ ڪرڻ واري قسم جي تبديلي کي سڏيو ويندو آهي. هڪ متغير کي تنگ ڪرڻ لاء، توهان کي واضح طور تي بيان ڪرڻ جي ضرورت آهي ته توهان پنهنجي قيمت کي وڌائڻ چاهيو ٿا. ھتي ھڪڙو مثال آھي جتي اسان ڪوشش ڪرڻ وارا آھيون ھڪڙو "ننڍو" ڊگھو int (جيڪو ان ۾ ھجڻ گھرجي) ۽ ٻه "وڏا" ڊگھا انگ جيڪي int جي حد کان ٻاھر آھن.
public class longToInt {

   public static void main(String[] args) {

       int myInt = 18;
       long myLong = 16000;
       long myVeryLong = 2147483648l;//l in the end means ‘long’
       long myVeryLong = 10000000000l;

       myInt = (int) myLong;
       System.out.println(myInt);
       myInt = (int) oneMoreLong;
       System.out.println(myInt);
       myInt = (int) myVeryLong;
       System.out.println(myInt);
   }
}
اسان مرتب ڪندڙ کي اطلاع ڏنو آهي ته اسان ڊگهي قيمت کي int متغير ۾ رکڻ چاهيون ٿا ۽ اسان هن فيصلي جي نتيجن جا ذميوار آهيون. مرتب ڪندڙ، هڪ تنگ قسم جو واضح اشارو ڏسي، تبادلي کي انجام ڏئي ٿو. نتيجي طور، اسان حاصل ڪريون ٿا:
16000 -2147483648 1410065408
خير، 16000 ضرور آهي جيڪو اسان کي ڏسڻ جي اميد آهي، پر -2147483648 ۾ مائنس ڇو آهي؟ ۽ هي 1410065408 ڇا مطلب آهي؟ حقيقت اها آهي ته اهڙا انگ هڪ ڊگهي متغير ۾ محفوظ ڪيا ويا آهن، جيڪو اسان کي ياد آهي، 64 بٽ وٺندو آهي. اسان ڪوشش ڪري رهيا آهيون ته انهن نمبرن کي هڪ int variable ۾ رکون جيڪو صرف 32 بٽس کي محفوظ ڪري سگهي. ضابطي جي طور تي، انهن 32 سيلز تي مشتمل هوندو صفر ۽ هڪ ڊگهو نمبر جي پهرين 32 بٽس مان، ۽ باقي صرف رد ڪيو ويندو. تنهن ڪري، جيڪڏهن اصل نمبر 32 بٽس ۾ نه ٿو اچي، ته اهي بٽ جيڪي مناسب نه هوندا آهن انهن کي صرف رد ڪيو ويندو. ان ڪري اسان وٽ صرف صحيح نمبر 16000 آهي، ڇاڪاڻ ته اهو 32 بٽ کان به گهٽ وٺندو آهي.

جاوا 8 ڊگهو انٽ ڪنورشن تائين

جاوا 8 ۾، رياضي ڪلاس ۾ ھڪڙو نئون طريقو آھي جيڪو لانگ کي int ۾ تبديل ڪندو . هتي اهو آهي:
Math.toIntExact(value);
هن طريقي جي باري ۾ بهترين شيء اها آهي ته اهو تبديل ٿيل نمبر جي ڊيگهه کي سنڀاليندو آهي، ۽ جيڪڏهن قيمت تمام وڏي آهي int ۾ فٽ ڪرڻ لاء ، اهو هڪ استثنا اڇلائي ڇڏيندو. اچو ته ڏسو ته اهو اسان جي مثال ۾ ڪيئن ڪم ڪري ٿو:
public class intToLong {

   public static void main(String[] args) {

       int myInt = 18;
       long myLong = 16000;
       long oneMoreLong = 2147483648l;
       long myVeryLong = 10000000000l;

       System.out.println(Math.toIntExact(myLong));
       int y = Math.toIntExact(oneMoreLong);
       System.out.println(oneMoreLong);
       System.out.println(Math.toIntExact(myVeryLong));
   }
}
پيداوار آهي:
سلسلي ۾ 16000 استثنا "main" java.lang.ArithmeticException: integer overflow at java.base/java.lang.Math.toIntExact(Math.java:1080) at intToLong.main(intToLong.java:13)
اهڙيء طرح، پروگرام صرف صحيح طور تي تبديل ٿيل نمبر 16000 کي پرنٽ ڪيو، ۽ پوء جڏهن ٻاهرئين حد نمبر 2147483648l کي int ۾ ڌڪڻ جي ڪوشش ڪئي ، طريقو هڪ استثنا اڇلائي ڇڏيو. تنهنڪري اسان کي رد ٿيل بٽس جو مسئلو ناهي، جيئن ته کلاسک جاوا جي صورت ۾ ڊگهي کان int ڪنورشن.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION