Extract Even Bits Only from 32-bit Register

#include <stdio.h>
#include <stdint.h>

uint32_t extract_even_bits(uint32_t reg) {
  int a = reg&(1<<0);
  int b = reg>>1;
  int c = b&(1<<1);
  int d = reg>>2;
  int e = d&(1<<2);
  int f = reg>>3;
  int g = f&(1<<3);
  int h = reg>>4;
  int i = h&(1<<4);
  int j = reg>>5;
  int k = j&(1<<5);
  int l = reg>>6;
  int m = l&(1<<6);
  int n = reg>>7;
  int o = n&(1<<7);
  int p = reg>>8;
  int q = p&(1<<8);
  int r = reg>>9;
  int s = r&(1<<9);
  int t = reg>>10;
  int u = t&(1<<10);
  int v = reg>>11;
  int w = v&(1<<11);
  int x = reg>>12;
  int y = x&(1<<12);
  int z = reg>>13;
  int hii = z&(1<<13);
  int ai = reg>>14;
  int bi = ai&(1<<14);
  int ci = reg>>15;
  int di = ci&(1<<15);
  int ei = reg>>16;
  int fi = ei&(1<<16);
  return a|c|e|g|i|k|m|o|q|s|u|w|y|hii|bi|di|fi;
    
}

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

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

85

Expected Output

15