সর্বাধিক গুরুত্বপূর্ণ বিট

কম্পিউটিং-এর পরিভাষায় সর্বাধিক গুরুত্বপূর্ণ বিট ([most significant bit মোস্ট্‌ সিগ্‌নিফিকেন্ট বিট্‌, সংক্ষেপে msb এমএসবি] ত্রুটি: {{Lang-xx}}: text has italic markup (সাহায্য)) হচ্ছে কোন বাইনারি সংখ্যার সর্বোচ্চ অবস্থান মানের বিট। অর্থাৎ বাম দিক থেকে প্রথম অশূন্য বিট। যেহেতু সংখ্যার অবস্থানমাত্রিক চিহ্নপদ্ধতিতে বা ‘পজিশনাল নোটেশনে’ সবচেয়ে বেশি মানের অঙ্ককে সবচেয়ে বাম দিকে লেখা হয়, সেহেতু সর্বাধিক গুরুত্বপূর্ণ বিটকে অনেক সময় “লেফ্‌ট মোস্ট বিট” বা “সর্ববামের বিট”-ও বলা হয়। এক বা দুইয়ের পূরক চিহ্নপদ্ধতিতে সর্বাধিক গুরুত্বপূর্ণ বিট দ্বারা সংখ্যার ধনাত্মকতা বা ঋণাত্মকতা প্রকাশিত হয়। যেখানে নির্দিষ্ট দৈর্ঘের বিট স্ট্রিংএর এমএসবি ‘’1’’ হওয়ার অর্থ সংখ্যাটি ঋণাত্মক এবং ‘’0’’ হবার অর্থ সংখ্যাটি ধনাত্মক। ইংরেজিতে এমএসবি দ্বারা অনেক সময় মোস্ট সিগনিফিকেন্ট বাইটও বোঝানো হয়। বিটের মত এখানেও সর্বচ্চ অবস্থান মানের বাইট কেই ‘এম এস বি’ বলা হয়। ইংরেজি তে লেখার সময় এক্ষেত্রে বড় হরফে (MSB) লেখা হয়। মোস্ট সিগনিফিকেন্ট বিট্‌স (বহুবচনে) বলতে সেইসব বিটের সেট কে বোঝায় যারা অবস্থান গত ভাবে এমএসবি’র সব চেয়ে কাছাকাছি। একটি বাইনারি সংখ্যার মধ্যকার বিটগুলিকে নির্দেশ করার জন্য প্রত্যেকটা বিটকে সাধারণত অবস্থান সূচক একটা সংখ্যা দেওয়া হয়। এই সংখ্যাগুলি শুন্য থেকে শুরুকরে ঐ বাইনারি সংখ্যার বিট সংখ্যার চেয়ে এক কম পর্যন্ত হয়। এই সংখ্যা সূচকের ক্রম বাম বা ডান যেকোন দিক থেকে শুরু হতে পারে (ব্যবহারিক প্রসঙ্গ নির্ভর)। একারণে বিভ্রান্তি এড়ানোর জন্য ‘এমএসবিকে সাধারণত ‘প্রথম বিট’ বা ‘শেষ বিট’ এভাবে না বলে ‘উচ্চমাত্রার বিট’ বলা হয়। 802.5 এবং FDDI, স্টান্ডার্ড অনুসারে মোস্ট সিগনিফিকেন্ট বিট কে প্রথমে ট্রান্সমিট করা হয়।[১] নিম্নে সি প্রোগ্রামিং ভাষায় একটা ৩২ বিট ইন্টিজারের অশুন্য এমএসবি নির্ণয়ের অ্যালগরিদম দেওয়া হল এখানে ওপারেটর '>>' ‘আনসাইন্ড রাইট শিফট’ অপারেশন নির্দেশ করে। /** * Returns the most significant bit position of n from 0 to 31. * -1 is returned if n is 0. */ int mostSignificantBitPosition(unsigned int n) { int pos = 0; int tmp; tmp = n >> 16; if (tmp != 0) { n = tmp; pos = pos + 16; } tmp = n >> 8; if (tmp != 0) { n = tmp; pos = pos + 8; } tmp = n >> 4; if (tmp != 0) { n = tmp; pos = pos + 4; } tmp = n >> 2; if (tmp != 0) { n = tmp; pos = pos + 2; } tmp = n >> 1; if (tmp != 0) { n = tmp; pos = pos + 1; } return pos + n - 1; } // C# code to return the index of the MSB. MSB(0)=0 public static int MostSignificantBit (UInt32 n) { int b = 0; if (0 != (n & (~0u << (1 << 4)))) { b |= (1 << 4); n >>= (1 << 4); } if (0 != (n & (~0u << (1 << 3)))) { b |= (1 << 3); n >>= (1 << 3); } if (0 != (n & (~0u << (1 << 2)))) { b |= (1 << 2); n >>= (1 << 2); } if (0 != (n & (~0u << (1 << 1)))) { b |= (1 << 1); n >>= (1 << 1); } if (0 != (n & (~0u << (1 << 0)))) { b |= (1 << 0); } return b; } // C# code to return the index of the MSB. MSB(0)=0 public static int MostSignificantBit(UInt64 n) { int b = 0; if (0 != (n & (~0uL << (1 << 5)))) { b |= (1 << 5); n >>= (1 << 5); } if (0 != (n & (~0uL << (1 << 4)))) { b |= (1 << 4); n >>= (1 << 4); } if (0 != (n & (~0uL << (1 << 3)))) { b |= (1 << 3); n >>= (1 << 3); } if (0 != (n & (~0uL << (1 << 2)))) { b |= (1 << 2); n >>= (1 << 2); } if (0 != (n & (~0uL << (1 << 1)))) { b |= (1 << 1); n >>= (1 << 1); } if (0 != (n & (~0uL << (1 << 0)))) { b |= (1 << 0); } return b; } যেসব কম্পিউটার ভাষা ইন্টারপ্রেটারের মাধ্যমে কাজ করে (যেমন পাইথন), সেসব ক্ষেত্রে এধরনের বিট অপারেশনের চেয়ে log 2 {\displaystyle \log _{2}} অপারেশনটি অনেক বেশি কার্যকর, দ্রুত এবং সংক্ষিপ্ত। নিম্নে এমএসবি নির্ণয়ে পাইথন ব্যবহারের একটা পদ্ধতি দেখান হল, from math import log def msb_pos(n): return int(log(n, 2)) জাভা ভার্সন ১.৫ থেকে টেমপ্লেট:Javadoc:SE এবংটেমপ্লেট:Javadoc:SE নামক দুইটি ‘মেথড’ পাওয়া যায় যারা যথাক্রমে ৩২-বিট এবং ৬৪-বিট ইন্টিজার সংখ্যার ‘লিডিং জিরো’ বা সংখ্যার বামের শুন্য সংখ্যা নির্ণয় করে। যেসংখ্যাটা সলে (ইন্টিজার সংখ্যার বিট সংখ্যা) - ১ - (এমএসবি এর অবস্থান মান বা পজিশন) এর সমান। Warren Jr., Henry S. (২০০২), Hacker's Delight, Addison Wesley, পৃষ্ঠা pp. 77, আইএসবিএন 978-0201914658 উদ্ধৃতি টেমপ্লেট ইংরেজি প্যারামিটার ব্যবহার করেছে (link) উদ্ধৃতি শৈলী রক্ষণাবেক্ষণ: অতিরিক্ত লেখা (link) সর্বনিম্ন গুরুত্বপূর্ণ বিট দ্বিমিক সংখ্যা পদ্ধতি চিহ্নযুক্ত সংখ্যা প্রকাশ পদ্ধতি দুইয়ের পরিপূরক