Số 0 đuôi (Trailing Zeros)
Số lượng bit 0 liên tiếp từ LSB (bit cuối) cho đến bit 1 đầu tiên.
Ví dụ: 104 = 1101000₂ → 3 trailing zeros.
Chương trình đếm trailing zeros
#include <stdio.h>
#include <stdlib.h>
int main() {
int num, i, trail = 0, size;
printf("Nhap so: "); scanf("%d", &num);
size = sizeof(int) * 8; // 32 bit
for (i = 0; i < size; i++) {
if ((num >> i) & 1) break; // gap bit 1
trail++;
}
printf("Trailing zeros = %d", trail);
return 0;
}
Kết quả
Nhap so: 24 Trailing zeros = 3
Số 0 dẫn đầu (Leading Zeros)
Số bit 0 từ MSB (bit dấu) cho đến bit 1 đầu tiên.
Ví dụ: 94 = ...000001011110₂ → 25 leading zeros (trên 32 bit).
Chương trình đếm leading zeros
#include <stdio.h>
#include <stdlib.h>
int main() {
int num, i, lead = 0, size, msb;
printf("Nhap so: "); scanf("%d", &num);
size = sizeof(int) * 8;
msb = 1 << (size - 1); // bit cao nhat
for (i = 0; i < size; i++) {
if ((num << i) & msb) break;
lead++;
}
printf("Leading zeros = %d", lead);
return 0;
}
Kết quả
Nhap so: 94 Leading zeros = 25