定义位域时,可以将中间的一些位留空,并将成员分配给特定的位。为什么中间的一些位是空的?
struct product {
unsigned int code : 6; // product code : 6 bit
unsigned int : 10; // not use 10 bit
unsigned int color : 5; // product color : 5 bit
unsigned int : 5; // not use 5 bit
unsigned int size : 6; // product si
我不知道该如何命名它,所以我不知道如何搜索它。
unsigned int odd : 1;
编辑:
更详细地说,它来自以下代码片段:
struct bitField {
unsigned int odd : 1;
unsigned int padding: 15; // to round out to 16 bits
};
我猜这涉及到一些东西,但我仍然不能完全理解。
位结构字段的最大位宽是多少?
struct i { long long i:127;}
我是否可以在struct中定义一个位字段,位字段的大小可以达到128位、256位或更大?有一些超宽的向量类型,如sse2 (128bit)、avx1/avx2 (256bit)、avx-512 (对于next Xeon Phis为512bit)寄存器;还有一些扩展,如gcc中的。
class A
{
char c; // c represents a value varying from 0 to 2^7-1 (I don't need a bigger range)
bool b; // b is a boolean value
} 类A使用2个字节。但是,由于c永远不会获得大于2^7-1的值(如注释中所指定的),因此可以使用c字节的一位来表示布尔值b。就像这样 class A
{
unsigned char x; // x represents both a value varying from 0 to 2^7-1 and a b
#include<stdio.h>
main()
{
union d
{
unsigned int a:1;
unsigned int b:3;
unsigned :0;
unsigned int d:1;
unsigned int e:1;
};
union d aa;
aa.b=9;
printf("d.aa.a=%d d.aa.b=%d",aa.a, aa.b);
system("pause");
}
在这个问题中,联
我最近看了一段关于颜色空间的YouTube视频(链接:)。有兴趣我查过了。原来不同的颜色空间可以代表不同的可见光谱的“子集”。并不是所有这些子集都是相同大小的。我不明白的是这是如何实现的。只要使用相同数量的字节来表示每个像素,则不管编码方式如何,排列都只有那么多。因此,有固定数量的不同颜色。现在我不懂颜色空间。也许他们确实使用了不同的字节数。我试着查了一下,但大多数文章都太晦涩,尤其是维基百科( Wikipedia )。也许有人能帮我一下?
下面是如何声明位字段的方法:
unsigned m_bitfield1 : 2; // a bitfield that occupies 2 bits
unsigned m_bitfield2 : 1; // a bitfield that occupies 1 bit
位字段仅仅是具有以位为单位的特定大小的小字段。
我的问题是:我是否可以使用自己的算法来处理默认数据类型,如整数或浮点数,这些数据类型占用了大量不必要的空间,作为任意大小的较小部分的集合,或者使用位字段有一些隐藏的好处?谢谢。
位字段的字段部分似乎表明它们只能是结构或联合中的字段。
位字段是否可以是典型的“独立”变量,位于任何聚合数据类型之外,如以下联合或结构:
int sum:6; //Can this work as a declaration statement?
sum=4;
若否,原因为何?如果位域基本上打算使用更少的内存,为什么我们不能将任何变量声明为位域,如果我们知道它不会超过那个大小的话?
我早就知道C语言中有位字段,偶尔我会用它们来定义密集的结构:
typedef struct Message_s {
unsigned int flag : 1;
unsigned int channel : 4;
unsigned int signal : 11;
} Message;
当我阅读开放源代码时,我经常发现位掩码和位移位操作来在手动位字段中存储和检索这样的信息。这很常见,我不认为作者不知道位字段语法,所以我想知道是否有理由通过位掩码和移位操作自己滚动位字段,而不是依赖编译器生成代码来获取和设置这样的位字段。