How to count the leading zeros in a binary number using C

2 Answers

0 votes
#include <stdio.h>

#define INT_SIZE sizeof(int) * 8 

void print_bits(unsigned int n) {
    for (unsigned int i = 1 << (INT_SIZE - 1); i > 0; i = i / 2) {
        (n & i) ? printf("1") : printf("0");
    }
}

int count_leading_zeros(int num) {
    int count = 0;

    int msb = 1 << (INT_SIZE - 1); // 32 bit 10000000000...
   
    for (int i = 0; i < INT_SIZE; i++) {
        if ((num << i) & msb) {
            break;
        }
        count++;
    }
    
    return count;
}

int main()
{
    int number = 41337;
    
    print_bits(number);

    printf("\n%d\n", count_leading_zeros(number));
    
    return 0;
}



  
/*
run:
  
00000000000000001010000101111001
16
  
*/

 



answered Apr 1, 2019 by avibootz
edited Dec 22, 2023 by avibootz
0 votes
#include <stdio.h>

void print_bits(int n, int total_bits) {
    for (int i = 1 << (total_bits - 1); i > 0; i = i / 2) {
        (n & i) ? printf("1") : printf("0");
    }
}

int count_leading_zeros(int num, int total_bits) {
    int count = 0;

    while (!(num & (1 << total_bits))) {
        num = (num << 1);
        count++;
    }
    
    return --count;
}

int main()
{
    int number = 8;
    
    print_bits(number, 16);
    
    
    printf("\n%d\n", count_leading_zeros(number, 16));
    
    return 0;
}

  
  
  
/*
run:
  
0000000000001000
12
  
*/

 



answered Dec 22, 2023 by avibootz

Related questions

1 answer 175 views
1 answer 155 views
1 answer 186 views
1 answer 209 views
1 answer 222 views
...