Tag: 位域

C编程语言中的Bitfields

如何访问C.Means中的整个结构成员我想在结构中获取变量的所有数据。 struct data { char a:1; char b:2; char c:3; char d:1; } arr; 我可以通过使用访问个人成员。 operator.But我需要访问该结构中的所有成员。请告诉我该怎么办。

线程安全和位域

我知道位字段是依赖于编译器的,但是我没有在最新的g ++和Visual C ++ 2010上找到关于位字段的线程安全性的文档。 位字段成员的操作是primefaces的吗?

如何将Visual Studio中的结构打包到包含uint32_t的24位?

我试图将现有的应用程序从32位ARM微控制器移植到桌面平台,如Microsoft Windows。 GCC用在ARM上,我能够使用32位MinGW编译器在Windows上成功编译应用程序,但是我没有成功使用Microsoft的Visual Studio编译器,这就是我在这里寻求帮助的原因。 这是我的应用程序正在做的事情: 我有一些帧缓冲区,每个像素包含三个字节,所以我的内存看起来像RGBRGBRGB等等。 我在ARM上使用DMA通道将像素推出到显示器,我的显示器直接理解这种内存布局。 我还想节省一些CPU周期,所以我想使用ARM的饱和ADD __UQADD8来绘制我的帧缓冲区,使用单个操作在所有三个通道上执行饱和加法。 为此,我需要在一个整数中使用所有三个通道作为__UQADD8参数。 这就是我为帧缓冲区的一个像素使用联合的原因是通过提供一个包含R,G,B作为uint8_t的结构并提供与24位宽整数标记数据相同的内存来访问单独的通道: union Rgb { struct { uint8_t r; uint8_t g; uint8_t b; } ch; unsigned int data : 24 __attribute__((__packed__)); } 将24位宽度和打包属性添加到数据整数中,以将整数的宽度限制为三个字节。 然后我可以像这样使用像素中的数据: Rgb Rgb::operator+(const Rgb & op) { __UQADD8(data, op.data); return Rgb(data); } 请注意, __UQADD8神奇地只写入我的整数的四个字节中的三个,并且不会改变我的帧缓冲区中下一个RGB的R通道。 以下测试程序certificate我的RGB在使用GCC时都紧凑: #include #include union Rgb { struct { uint8_t […]

具有位字段的结构的大小

这里我有一个代码片段。 #include int main() { struct value { int bit1 : 1; int bit2 : 4; int bit3 : 4; } bit; printf(“%d”,sizeof(bit)); return 0; } 我得到输出为4(32位编译器)。 谁能解释我怎么样? 为什么不是1 + 4 + 4 = 9? 我之前从未使用过bit字段,所以会喜欢一些帮助。 谢谢。 🙂

如何处理超过64位的位域?

问题说明了一切。 如果我有一个96位字段: uint32_t flags[3]; //(thanks @jalf!) 鉴于我的子域可能位于32位边界(例如,从第29位到第35位的字段),我如何最好地访问它? 我需要尽可能快地访问,所以我宁愿不将它们作为数组的32位元素进行迭代。

如何在C程序中声明unsigned int

在这个链接上,我遇到了http://lxr.linux.no/#linux+v2.6.36/include/linux/pci.h#L299整数声明unsigned int is_added:1; 我已经制作了C程序并在其中声明了整数但是在上面我看到了使用:那是什么语法?

包含位域的结构的大小

可能重复: 为什么structof sizeof不等于每个成员的sizeof总和? 我试图理解位域的概念。 但我无法找到CASE III中以下结构的大小为8个字节的原因。 案例I: struct B { unsigned char c; // +8 bits } b; 的sizeof(B); //输出:1(因为unsigned char在我的系统上占用1个字节) 案例II: struct B { unsigned b: 1; } b; sizeof(b); // Output: 4 (because unsigned takes 4 bytes on my system) 案例III: struct B { unsigned char c; // +8 bits unsigned b: 1; […]

使用带有联合的位字段是否有效?

我使用了像这样的结构的bit字段, struct { unsigned int is_static: 1; unsigned int is_extern: 1; unsigned int is_auto: 1; } flags; 现在我想知道是否可以用一个联盟来完成,所以我修改了代码,如, union { unsigned int is_static: 1; unsigned int is_extern: 1; unsigned int is_auto: 1; } flags; 我找到了带有union的位字段,但是从输出中可以理解,并集中的所有字段都被赋予了一个位。 现在我看到使用带有union的位字段并不是错误的,但在我看来,像这样使用它在操作上是不正确的。 那么答案是什么 – 将字段与联合使用是否有效?

位域的概念

struct A { int a:2; int b:3; int c:3; }; int main() { struct A p = {2,6,1}; printf(“\n%d\n%d\n%d\n”,pa,pb,pc); return 0; } 输出为:-2,-2,1 在C complier和C ++编译器中输出上面的代码会是什么? 为什么?

如何使用GCC编译器强制执行struct bit顺序?

我想知道是否有一个GCC C编译器指令允许我确定结构打包的位顺序? 喜欢的东西: #pragma bit_order left 这种需求的基本原理是我有以下结构: struct { union { unsigned char BYTE; struct { unsigned char B0: 1; unsigned char B1: 1; unsigned char B2: 1; unsigned char B3: 1; unsigned char B4: 4; }BIT; }ITEM; } myStruct; 有了这个结构,我希望编译器以这种方式打包: Bit order: | 7 6 5 4 3 2 1 0 | Label: |B0 […]