যদিও অনেক দেরি হয়ে গেছে তবুও আমি এই বিষয়ে আমার ইনপুটটি দিতে চাই কারণ এটি জেবি নিজেটের প্রদত্ত সমাধান কেন কাজ করে তা পরিষ্কার করে দিতে পারে। বাইট পার্সার নিয়ে কাজ করার এবং নিজেকে রূপান্তর করার জন্য এই ছোট্ট সমস্যায় আমি হোঁচট খেয়েছি। আপনি যখন কোনও বড় আকারের ইন্টিগ্রাল টাইপ থেকে ছোট আকারের ইন্টিগ্রাল টাইপে অনুলিপি করেন তখন এই জাভা ডক বলেছেন যে এটি ঘটে:
https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3
একটি ইন্টিগ্রাল টাইপ টিতে স্বাক্ষরিত পূর্ণসংখ্যার সংকীর্ণ রূপান্তর কেবলমাত্র সর্বনিম্ন ব্যতীত সমস্ত কিছু বাদ দেয় অর্ডার বিট, যেখানে n টি টাইপ টি উপস্থাপন করতে ব্যবহৃত বিটের সংখ্যা is সংখ্যার মানটির পরিমাণ সম্পর্কে তথ্য সম্ভাব্য ক্ষতি ছাড়াও, ফলাফল ফলাফলের চিহ্নটি ইনপুট মানের চিহ্নের থেকে পৃথক হতে পারে ।
আপনি নিশ্চিত হয়ে উঠতে পারেন যে এই জাভা ডকটি বলেছেন যে বাইট একটি অবিচ্ছেদ্য প্রকার
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
বাইট: বাইট ডেটা টাইপ একটি 8-বিট স্বাক্ষরিত দু'জনের সংখ্যার পরিপূরক
সুতরাং একটি বাইট (8 বিট) এ একটি পূর্ণসংখ্যা (32 বিট) castালার ক্ষেত্রে, আপনি কেবলমাত্র সেই পূর্ণসংখ্যার শেষ (কমপক্ষে 8 টি বিট) প্রদত্ত বাইট ভেরিয়েবলটিতে অনুলিপি করেন।
int a = 128;
byte b = (byte)a;
System.out.println(b);
গল্পের দ্বিতীয় অংশে জাভা ইউনিারি এবং বাইনারি অপারেটররা অপারেশনগুলিকে কীভাবে প্রচার করে তা জড়িত।
https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.6.2
প্রশস্ত আদি রূপান্তর (§5.1.2) উভয় বা উভয় অপারেশনকে নির্দিষ্ট হিসাবে রূপান্তর করতে প্রয়োগ করা হয় নিম্নলিখিত বিধি দ্বারা:
যদি অপরেন্দ্র টাইপ ডাবল হয় তবে অন্যটি ডাবল রূপান্তরিত হয়।
অন্যথায়, যদি অপরেন্দ্র টাইপ ফ্লোটের হয় তবে অন্যটি ফ্লোটে রূপান্তরিত হয়।
অন্যথায়, যদি অপরেন্দ্র টাইপ দীর্ঘ হয়, অন্যটি দীর্ঘ রূপান্তরিত হয়।
অন্যথায়, উভয় অপারেশন টাইপ int তে রূপান্তরিত হয়।
আশ্বস্ত হোন, আপনি যদি ইন্টিগ্রাল টাইপ ইন্ট এবং / বা কম এর সাথে কাজ করছেন তবে এটি কোনও ইনট হিসাবে উন্নীত হবে।
a = b & 0xFF;
System.out.println(a);
আমি এটিকে ঘিরে আমার মাথা আঁচড়ালাম :)। রাগটম্যান এর জন্য এখানে একটি ভাল উত্তর আছে।
জাভাতে বিটওয়াইজ অপারেটরগুলি কেবল পূর্ণসংখ্যার এবং দীর্ঘ জন্য?