C++でビットアクセス

環境とコンパイラのバージョン

  • CentOS7 64bit
  • clang 3.4.2

FooBar構造体を定義して1bit(bit0)のfooと3bit(bit1-3)のbarを定義して、1byteの値cをキャストして取り出しています。

#include <stdio.h>

struct FooBar {
  unsigned char foo:1; // bit0
  unsigned char bar:3; // bit1-3
  unsigned char baz:4; // bit4-7
};

int main(int argc, char** argv) {
  unsigned char c;

  c = 0b00001101;

  // 1 = 1
  // 110 = 6

  // foo: 1, bar: 6
  printf("foo: %d, bar: %d\n", ((FooBar&) c).foo, ((FooBar&) c).bar);
}