问题标签 [bit-fields]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
392 浏览

c - 如何破解这个位域?

我必须编写一个函数setbits(x,p,n,y),该函数返回从位置开始xn位,该位置设置为unsigned char 变量的p最右侧位(其他位保持不变)。ny

例如,如果x = 10101010 (170 decimal)and y = 10100111 (167 decimal)and n = 3andp = 6说 then 你需要去掉 3 位y (111)并将它们放在x适当的位置10xxx010以获得答案10111010

这个函数应该以二进制形式打印出结果。

输出应该是这样的:

嗨,我在位字段中遇到了这个问题。
我应该怎么做?

0 投票
4 回答
307 浏览

c# - qt to c#是什么意思:操作符在struct中的意思

我有一段代码试图从旧的 qt 文件转换为 C#,但我有点不清楚下面联合中的结构中发生了什么。我不确定':'是做什么的......我猜它设置了大小,但找不到任何关于此的文档。此外,由于 C# 没有联合,因此转换此类内容的最佳做法是什么。谢谢

0 投票
1 回答
263 浏览

php - FilterIterator 位掩码(或位域)

我正在为位掩码(或者它是位域?)而苦苦挣扎。我不知道该怎么做了。

我想创建一个接受过滤内容标志的 DirectoryFilterIterator。我想我会使用这些位:

因为 aDOT也被认为是 aDIR我也希望能够区分这两者。如果我是正确的,我认为这样的事情应该是可能的:

换句话说,这应该过滤掉,DIR除非它是一个DOT. 但我完全坚持如何让过滤工作(在accept方法中):

...尤其是因为我一直在否定,我有点迷路了。我怎样才能让它正常工作?

0 投票
2 回答
4414 浏览

c - 如何将位域(通过引用)传递给函数?

我的问题是如何通过引用函数来传递位域实例。我已经按如下所示执行了此操作,但是当我输入函数 DAC_set_gain_code 时,处理器会引发中断故障。就通过位域而言,我所做的是否正确?

我创建了一个位域(见下文),它代表 DAC 芯片上的一个 24 位寄存器,我想将其写入并保存在 .h 文件中。

我有一个像这样初始化位域的函数:

实际填充位域的函数如下所示:

hal_DAC_set_gain_code_uni 的函数原型是:

任何建议表示赞赏。

谢谢。

0 投票
2 回答
9057 浏览

go - Go:位域和位打包

C 语言的位域提供了一种在结构中定义任意宽度字段的相当方便的方法(暂时不用考虑可移植性的问题。)例如,这是一个带有一对字段和一个“标志”的简单结构:

添加#pragma 语句将此结构打包成一个32 位字(确保指针的指针操作my_chunk对齐,例如,同时节省空间)。

访问每个字段在语法上非常好:

在没有语言帮助的情况下执行此操作的另一种方法相当丑陋,并且几乎演变为汇编程序。例如,一种解决方案是为您要访问的每个字段设置位移宏:

..或大致类似的东西(更正式,看看这个

所以问题是,如果我想在 go 中“做”位域,这样做的最佳实践是什么?

0 投票
3 回答
18690 浏览

c# - 位域加值的扩展方法(标志枚举)

而不是这样做来为 flags 枚举变量添加一个值:

我想创建一个扩展方法来实现这一点:

可能的?你怎么做呢?

0 投票
1 回答
1197 浏览

struct - 微控制器位域

我正在学习微控制器,但我很难理解如何使用联合来设置 gpio 端口上的各个位。

我正在使用上述内容来访问字节的各个位,但是如何使用它以下列方式分配 io 端口值?

我宁愿不分配 _BYTE 类型,然后将端口分配给它。

MCF_GPIO_PORTDD 只是一个内存地址。

0 投票
2 回答
5309 浏览

c# - 如何使用 LINQ 和 lambda 对列表中对象的位标志枚举属性执行按位或?

我有一个对象集合,每个对象都有一个位字段枚举属性。我想要得到的是整个集合中位字段属性的逻辑或。如何在不循环集合的情况下做到这一点(希望使用 LINQ 和 lambda 代替)?

这是我的意思的一个例子:

我试过这样使用.Aggregate

但这不起作用,我不知道如何使用它来获得我想要的东西。有没有办法使用 LINQ 和一个简单的 lambda 表达式来计算这个,还是我坚持只在集合上使用循环?

注意:是的,这个示例案例非常简单,foreach因为它简单且不复杂,所以基本就是要走的路线,但这只是我实际使用的简化版本。

0 投票
2 回答
2499 浏览

c - 无符号位域的类型:int 或 unsigned int

C99 标准的第 6.3.1.1 节包含:

以下可以用在表达式中,只要可以使用intor unsigned int

_Bool[...] , int, signed int, or类型的位域unsigned int

如果 anint可以表示原始类型的所有值,则将该值转换为int; 否则,将其转换为unsigned int.

在我看来,这意味着unsigned int位域被提升为int,除非无符号位域的宽度等于 的宽度int,在这种情况下最后一个短语适用。

我有以下程序:

和两个系统来执行这个程序(int在两个系统上都是 32 位的)。一个系统说这个程序打印 1,另一个说它打印 0。我的问题是,我应该针对这两个系统中的哪一个提交错误报告?(由于上面的摘录,我倾向于针对打印 0 的系统提交报告)

0 投票
7 回答
40932 浏览

c - 为什么位字节序是位域中的一个问题?

任何使用位域的可移植代码似乎都可以区分小端和大端平台。有关此类代码的示例,请参见linux 内核中 struct iphdr 的声明。我不明白为什么位字节序是一个问题。

据我了解,位域是纯粹的编译器构造,用于促进位级操作。

例如,考虑以下位域:

在这里,写作d->f2只是一种简洁易读的说法(i>>1) & (1<<4 - 1)

但是,位操作是明确定义的,并且无论架构如何都可以工作。那么,位域为什么不能移植呢?