Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Đếm số 0 dẫn đầu và 0 đuôi trong số nhị phân C


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