是否可以在C ++中使用类型def(如10位或12位)定义一些奇数大小的数据类型而不是标准类型?
答案 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)
使用Bitfields。猜猜这应该有用http://www.cs.cf.ac.uk/Dave/C/node13.html#SECTION001320000000000000000