C ++中的10或12位字段数据类型

时间:2015-04-09 04:47:11

标签: c++ variables abstract-data-type

是否可以在C ++中使用类型def(如10位或12位)定义一些奇数大小的数据类型而不是标准类型?

3 个答案:

答案 0 :(得分:3)

您可以使用位域:

struct bit_field
{
    unsigned x: 10; // 10 bits
};

并像

一样使用它
bit_field b;
b.x = 15;

示例:

#include <iostream>

struct bit_field
{
    unsigned x: 10; // 10 bits
};

int main()
{
    bit_field b;
    b.x = 1023;
    std::cout << b.x << std::endl;
    b.x = 1024; // now we overflow our 10 bits
    std::cout << b.x << std::endl;
}

AFAIK,无法在struct之外设置位域,即

unsigned x: 10; 

本身无效。

答案 1 :(得分:2)

排序,如果使用位字段。但是,请记住,位字段仍然包含在某些内部类型中。在下面粘贴的示例中,has_foo和foo_count都在无符号整数内“打包”,在我的机器上使用四个字节。

#include <stdio.h>

struct data {
  unsigned int has_foo : 1;
  unsigned int foo_count : 7;
};

int main(int argc, char* argv[])
{
  data d;
  d.has_foo = 1;
  d.foo_count = 42;

  printf("d.has_foo = %u\n", d.has_foo);
  printf("d.foo_count = %d\n", d.foo_count);
  printf("sizeof(d) = %lu\n", sizeof(d));

  return 0;
}

答案 2 :(得分:0)