এখানে ভাল উত্তর আছে, কিন্তু আমি বিটওয়াইজ অপারেশনগুলির কোনও বিক্ষোভ দেখতে পাচ্ছি না। দর্শকের মতো (বর্তমানে গৃহীত উত্তর) বলেছেন, জাভা ডিফল্ট অনুসারে পূর্ণ সংখ্যার সাথে স্বাক্ষর করে (জাভা 8 স্বাক্ষরবিহীন পূর্ণসংখ্যার চিহ্ন রয়েছে, তবে আমি সেগুলি কখনও ব্যবহার করি নি)। আরও অগ্রণী ছাড়া, আসুন এটি করা ...
আরএফসি 868 উদাহরণ
আপনার যদি আইও-তে স্বাক্ষরবিহীন পূর্ণসংখ্যার লেখার দরকার হয় তবে কী হবে? ব্যবহারিক উদাহরণ হ'ল আপনি যখন আরএফসি 868 অনুসারে সময় আউটপুট করতে চান । এর জন্য একটি 32-বিট, বড়-এন্ডিয়ান, স্বাক্ষরবিহীন পূর্ণসংখ্যার প্রয়োজন যা 1 জানুয়ারী, ১৯00, সকাল 12:00 থেকে সেকেন্ডের সংখ্যাকে এনকোড করে you আপনি কীভাবে এটি এনকোড করবেন?
আপনার নিজের স্বাক্ষরযুক্ত 32-বিট পূর্ণসংখ্যার মতো করুন:
4 বাইট (32 বিট) এর বাইট অ্যারে ঘোষণা করুন
Byte my32BitUnsignedInteger[] = new Byte[4] // represents the time (s)
এটি অ্যারে সূচনা করে, দেখুন বাইট অ্যারেগুলি কি জাভাতে শূন্যের দিকে শুরু করা হয়েছে? । এখন আপনাকে বিগ-এন্ডিয়ান অর্ডারে (বা আপনি যদি সর্বনাশ করতে চান তবে লিটল-এন্ডিয়ান) তথ্য সহ প্রতিটি বাইট পূরণ করতে হবে। ধরুন আপনার জাভাতে দীর্ঘ সময় রয়েছে (জাভাতে দীর্ঘ পূর্ণসংখ্যাগুলি b৪ বিট দীর্ঘ) আপনি secondsSince1900
(যা শুধুমাত্র প্রথম ৩২ বিট মূল্যের ব্যবহার করে এবং আপনি যে তারিখের রেফারেন্সটি জানুয়ারীর ১ জানুয়ারি, ১৯ 1970০ তারিখের উল্লেখ করেছেন) তা পরিচালনা করেছেন আপনি এগুলি থেকে বিটগুলি বের করতে এবং সেই বিটগুলিকে পজিশনে (অঙ্কগুলিতে) স্থানান্তর করতে লজিক্যাল এ্যান্ড ব্যবহার করতে পারেন যা বাইটে ঝাঁকিয়ে দেওয়া এবং বিগ-এন্ডিয়ান অর্ডারে উপেক্ষা করা হবে না।
my32BitUnsignedInteger[0] = (byte) ((secondsSince1900 & 0x00000000FF000000L) >> 24); // first byte of array contains highest significant bits, then shift these extracted FF bits to first two positions in preparation for coersion to Byte (which only adopts the first 8 bits)
my32BitUnsignedInteger[1] = (byte) ((secondsSince1900 & 0x0000000000FF0000L) >> 16);
my32BitUnsignedInteger[2] = (byte) ((secondsSince1900 & 0x000000000000FF00L) >> 8);
my32BitUnsignedInteger[3] = (byte) ((secondsSince1900 & 0x00000000000000FFL); // no shift needed
আমাদের my32BitUnsignedInteger
এখন একটি স্বাক্ষরযুক্ত 32-বিট, বিগ-এন্ডিয়ান পূর্ণসংখ্যার সমতুল্য যা আরসিএফ 868 স্ট্যান্ডার্ডকে মেনে চলে। হ্যাঁ, লম্বা ডেটাটাইপটি স্বাক্ষরিত হয়েছে, তবে আমরা সেই সত্যটিকে উপেক্ষা করেছি কারণ আমরা ধরে নিয়েছি যে সেকেন্ডসিন্স ১৯০০ কেবলমাত্র নীচের ৩২ বিট ব্যবহার করেছে)। দীর্ঘকে বাইটে চাপিয়ে দেওয়ার কারণে, 2 ^ 7 (হেক্সের প্রথম দুটি অঙ্ক) এর চেয়ে বেশি সমস্ত বিট উপেক্ষা করা হবে।
উত্স রেফারেন্স: জাভা নেটওয়ার্ক প্রোগ্রামিং, চতুর্থ সংস্করণ।