CodeGym /جاوا بلاگ /Random-UR /جاوا میں لانگ کو انٹ میں کیسے تبدیل کریں۔
John Squirrels
سطح
San Francisco

جاوا میں لانگ کو انٹ میں کیسے تبدیل کریں۔

گروپ میں شائع ہوا۔
اس آرٹیکل میں، ہم جاوا میں لانگ کو int میں تبدیل کرنے اور کوڈ کی کچھ مثالیں لکھنے کا طریقہ بتانے جا رہے ہیں ۔ چونکہ long ایک بڑی ڈیٹا کی قسم ہے int سے ، یہاں ہمیں اس طرح کی تبدیلی کے لیے ٹائپ کاسٹنگ کا استعمال کرنا چاہیے۔ جیسا کہ آپ شاید پہلے ہی جان چکے ہوں گے کہ جاوا میں لمبا اور int دونوں ڈیٹا کی ابتدائی اقسام ہیں۔ اس کا مطلب ہے کہ وہ طبقاتی اشیاء نہیں ہیں۔ تمام آبجیکٹ اور ارے ہیپ اسپیس میں محفوظ ہیں جبکہ قدیم قسمیں جیسے کہ 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;

جاوا لانگ ٹو کنورژن

اب آئیے اس مضمون کے اہم کام کی طرف واپس آتے ہیں — 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 متغیر میں ڈالنے کی کوشش کر رہے ہیں جو صرف 32 بٹس کو محفوظ کر سکتا ہے۔ ایک اصول کے طور پر، ان 32 سیلز میں لمبے نمبر کے پہلے 32 بٹس میں سے زیرو اور والے ہوں گے ، اور باقی کو صرف رد کر دیا جائے گا۔ لہذا، اگر اصل نمبر 32 بٹس میں فٹ نہیں ہوتا ہے، تو وہ بٹس جو فٹ نہیں ہوتے ہیں، صرف رد کردیئے جاتے ہیں. اس لیے ہمارے پاس صرف صحیح نمبر 16000 ہے، کیونکہ یہ 32 بٹس سے کم لیتا ہے۔

جاوا 8 لانگ ٹو int کنورژن

جاوا 8 میں، ریاضی کی کلاس میں ایک نیا طریقہ ہے جو long کو 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 استثناء 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