CodeGym /Java Blog /এলোমেলো /কীভাবে জাভাতে লংকে int-এ রূপান্তর করবেন
John Squirrels
লেভেল 41
San Francisco

কীভাবে জাভাতে লংকে int-এ রূপান্তর করবেন

এলোমেলো দলে প্রকাশিত
এই নিবন্ধে, আমরা ব্যাখ্যা করতে যাচ্ছি কিভাবে জাভাতে লংকে int- এ রূপান্তর করা যায় এবং কিছু কোড উদাহরণ লিখতে হয়। যেহেতু long হল int-এর তুলনায় একটি বড় ডেটা টাইপ , এখানে আমাদের এই ধরনের রূপান্তরের জন্য টাইপ কাস্টিং ব্যবহার করা উচিত। আপনি সম্ভবত ইতিমধ্যেই জানেন জাভাতে দীর্ঘ এবং int উভয়ই আদিম ডেটা প্রকার। তার মানে তারা ক্লাস অবজেক্ট নয়। সমস্ত অবজেক্ট এবং অ্যারে হিপ স্পেসে সংরক্ষণ করা হয় যখন আদিম প্রকার যেমন int এবং long স্ট্যাক মেমরিতে সংরক্ষণ করা হয়। লং এবং int কিছুটা অনুরূপ। পূর্ণসংখ্যা মানে পূর্ণ সংখ্যা, যা ধনাত্মক, ঋণাত্মক বা শূন্য হতে পারে। দুটোই লম্বাএবং 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 ভেরিয়েবলের মধ্যে রাখার চেষ্টা করছি যা শুধুমাত্র 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));
   }
}
আউটপুট হল:
থ্রেড "প্রধান" java.lang.ArithmeticException-এ 16000 ব্যতিক্রম: intToLong.main(intToLong.java:13) এ java.base/java.lang.Math.toIntExact(Math.java:1080) এ পূর্ণসংখ্যা ওভারফ্লো
এইভাবে, প্রোগ্রামটি শুধুমাত্র সঠিকভাবে রূপান্তরিত সংখ্যা 16000 মুদ্রণ করেছে, এবং তারপর যখন 2147483648l-এর বাইরের নম্বর int- এ ধাক্কা দেওয়ার চেষ্টা করছে , পদ্ধতিটি একটি ব্যতিক্রম ছুঁড়ে দিয়েছে। সুতরাং আমরা বাতিল করা বিটগুলির সমস্যা নেই, যেমন ক্লাসিক জাভা দীর্ঘ থেকে int রূপান্তরের ক্ষেত্রে ।
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION