22. Extract Even Bits Only from 32-bit Register

Back To All Submissions
Previous Submission
Next Submission
#include <stdio.h>
#include <stdint.h>

uint32_t extract_even_bits(uint32_t reg) {
    
    uint16_t result  = 0;
    uint16_t pos = 0;

    while(reg)
    {
        result |= ((reg & 1U) << pos);
        pos++;
        reg >>= 2;
    }

    return result;
    
}

int main() {
    uint32_t reg;
    scanf("%u", &reg);
    printf("%u", extract_even_bits(reg));
    return 0;
}

// you have to extract the even bit.
// result = 1100
// reg =  0101 0010 

// while(reg)    --->


//  result |= ((reg & 1U) << pos);
//  pos++;
//  reg >>= 2;
//              <---

// Iteration : 1

// result = 0000 0000
// pos = 0
// reg = 0101 0010
//   |
//   v
// (reg & 1U) << pos -> (0101 0010 & 0000 0001) << 0 --> (0000 0000)

// result = 0000 0000 |0000 0000 --> 0000 0000


// Iteration : 2

// result = 0000 0000
// pos = 1
// reg = 0001 0100

//   |
//   v
// (reg & 1U) << pos -> (0001 0100 & 0000 0001) << 1 --> (0000 0000)

//  result = 0000 0000 |0000 0000 --> 0000 0000

// Iteration : 3

// result = 0000 0000
// pos = 2
// reg = 0000 0101

//   |
//   v
// (reg & 1U) << pos -> (0000 0101 & 0000 0001) << 2 --> (0000 0100)
// result = 0000 0000 |0000 0100 --> 0000 0100


// Iteration : 4

// result = 0000 0100
// pos = 3
// reg = 0000 0001

//   |
//   v
// (reg & 1U) << pos -> (0000 0001 & 0000 0001) << 3 --> (0000 1000)
// result = 0000 0100 | 0000 1000 --> 0000 0100

// result = 0000 1100






Solving Approach

 

 

 

Was this helpful?
Upvote
Downvote