1. ホーム
  2. c

[解決済み] C言語で整数値からビット単位のデータを取得するには?

2022-08-02 03:48:08

質問

10進数のビットを抽出したい。

例えば、7は2進数の0111ですが、boolに格納されている全ビットの0 1 1 1を取り出したいのです。どのようにすればよいのでしょうか?

OK、ループは良い選択ではありません、このために何か他のことをすることができますか?

どのように解決するのですか?

nのk番目のビットが欲しい場合は、次のようにします。

(n & ( 1 << k )) >> k

ここでは、マスクを作成し、マスクをnに適用し、マスクされた値を右シフトして、必要なビットだけを取得しています。より完全に書くとこうなります。

    int mask =  1 << k;
    int masked_n = n & mask;
    int thebit = masked_n >> k;

ビットマスキングについて詳しくは はこちら .

以下はプログラムです。

#include <stdio.h>
#include <stdlib.h>

int *get_bits(int n, int bitswanted){
  int *bits = malloc(sizeof(int) * bitswanted);

  int k;
  for(k=0; k<bitswanted; k++){
    int mask =  1 << k;
    int masked_n = n & mask;
    int thebit = masked_n >> k;
    bits[k] = thebit;
  }

  return bits;
}

int main(){
  int n=7;

  int  bitswanted = 5;

  int *bits = get_bits(n, bitswanted);

  printf("%d = ", n);

  int i;
  for(i=bitswanted-1; i>=0;i--){
    printf("%d ", bits[i]);
  }

  printf("\n");
}