32ビット整数型を8つの4ビット値に分割する

/*
32ビット整数型(long int)をとり、それを8つの4ビット値に分割する。符号ビットに注意。
*/

#include <stdio.h>

int main(){
  char c[100];
  int i, n, target, ary[8];
  
  fgets(c, sizeof(c), stdin);
  sscanf(c, "%d", &target);
  for(i=0, n=0; n<32; n+=4, i++){
    ary[i] = (target >> n) & 15;
  }
  for(i=7; i>-1; i--) printf("%d ", ary[i]);
}

入力: 2147483647*1
出力: 7 15 15 15 15 15 15 15

うーん。こういうことかな?

*1:2^31-1