ট্রেলিং জিরো (Trailing Zeros)
LSB (লীস্ট সিগনিফিক্যান্ট বিট) থেকে প্রথম '১' পাওয়া পর্যন্ত 존재하는 συνεχিত শূন্যের সংখ্যা।
উদাহরণ
দশমিক ১০৪ = বাইনারি 1101000 (MSB ... LSB)
LSB থেকে: 0, 0, 0, 1 → প্রথম '১' পাওয়া পর্যন্ত ৩টি শূন্য।
ট্রেলিং জিরো = 3
লিডিং জিরো (Leading Zeros)
MSB (মোস্ট সিগনিফিক্যান্ট বিট) থেকে প্রথম '১' পাওয়া পর্যন্ত არსিত শূন্যের সংখ্যা।
উদাহরণ
দশমিক ৯৪ = বাইনারি ...001011110 (৩২-বিট ইন্টিজারে)
MSB থেকে প্রথম '১' পাওয়া পর্যন্ত ২৫টি শূন্য।
লিডিং জিরো = 25
সি প্রোগ্রাম: ট্রেলিং জিরো কাউন্ট
#include <stdio.h>
#include <stdlib.h>
int main() {
int num, trail = 0;
int size = sizeof(int) * 8; // 32 bits typically
printf("Enter a number: ");
scanf("%d", &num);
for (int i = 0; i < size; i++) {
if ((num >> i) & 1) // i-th bit চেক
break;
trail++;
}
printf("Trailing zeros = %d\n", trail);
return 0;
}
আউটপুট
Enter a number: 24 Trailing zeros = 3
সি প্রোগ্রাম: লিডিং জিরো কাউন্ট
#include <stdio.h>
#include <stdlib.h>
int main() {
int num, lead = 0;
int size = sizeof(int) * 8;
int msb = 1 << (size - 1); // MSB মাস্ক
printf("Enter a number: ");
scanf("%d", &num);
for (int i = 0; i < size; i++) {
if ((num << i) & msb) // লেফট শিফট করে MSB চেক
break;
lead++;
}
printf("Leading zeros = %d\n", lead);
return 0;
}
আউটপুট
Enter a number: 94 Leading zeros = 25
বিল্ট-ইন ফাংশন (GCC/Clang এক্সটেনশন)
// GCC/Clang বিল্ট-ইন (অনসাইনড ইন্টিজারের জন্য)
int n = 24;
int tz = __builtin_ctz(n); // Count Trailing Zeros = 3
int lz = __builtin_clz(n); // Count Leading Zeros = 28 (32-bit)
// লং লং এর জন্য
long long x = 24;
int tz = __builtin_ctzll(x);
int lz = __builtin_clzll(x);
সতর্কতা: ইনপুট ০ হলে আচরণ অনির্ধারিত (undefined)।
সারসংক্ষেপ
- ট্রেলিং জিরো: LSB থেকে প্রথম ১ পর্যন্ত শূন্য।
- লিডিং জিরো: MSB থেকে প্রথম ১ পর্যন্ত শূন্য।
- বিটওয়াইজ শিফট (
>>,<<) এবং মাস্ক দিয়ে কাউন্ট করা যায়। - কম্পাইলার বিল্ট-ইন ব্যবহার করলে খুব দ্রুত ও সহজ।