问题标签 [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.
c++ - 位域与位集
我想将位存储在数组中(如结构)。所以我可以遵循以下两种方法中的任何一种
方法 1 (AN 1)
方法 2 (AN 2)
为什么有人更喜欢 AN 2 而不是 AN 1?
tsql - 如何在 TSQL 中读取/写入完整的 32 位或 64 位 int 或 bigint 位掩码字段
设置第 32 位和第 64 位很棘手。
32位解决方案:
我让它适用于 32 位字段。诀窍是在将 POWER 函数的返回值转换为 int 之前将其转换为 binary(4)。如果您尝试直接转换为 int,而不先转换为 binary(4),则在对第 32 位(索引 31)进行操作时会出现算术溢出异常。此外,您必须确保传递给 POWER 的表达式具有足够大的类型(例如 bigint)以存储最大返回值 (2^31),否则 POWER 函数将引发算术溢出异常。
64位问题:
我打算对 64 位字段使用类似的方法,但是我发现 POWER 函数返回的值不准确,尽管表达式/返回值使用了 decimal(38) 类型。例如:“select POWER(CAST(2 as decimal(38)), 64)”返回 18446744073709552000(只有前 16 位数字是准确的)而不是 18446744073709551616 的正确值。即使我只将 2 提高到63次方,那个结果还是不准确的。
POWER 函数的文档表明“如果使用货币或数字数据类型,则内部转换为浮点数会导致精度损失。” (注意数字类型在功能上等同于十进制类型)。
我认为正确处理 64 位字段的唯一方法是对它们的 32 位一半进行操作,但这需要对 @bitindex 属性进行额外检查,以查看我需要对哪一半进行操作。是否有任何内置函数或更好的方法来显式设置 TSQL 中 32 位和 64 位位掩码字段中的最终位?
c++ - 迭代位域的成员
我们有这个例子:
如何“自动”访问成员,例如:
ce{0-10} ?
说如果我想读 c.e0,那么 c.e1 ...
如果我的结构将有 1000 个元素,我认为我不应该写这么多代码,对吧?
你能帮我一个解决方法,一个想法吗?
我提到我已经阅读了与此问题相关的其他帖子,但我没有找到解决方案。
非常感谢 !
c - 如何确定/测量具有位域的结构的大小?
- ,
int b:31
输出为 8。 - ,
int b:1
输出为 4。 - ,
int b:32
输出为 12。
有人可以解释这个原因吗?
c++ - 什么时候值得使用位域?
使用 C 的位域实现是否值得?如果是这样,它什么时候使用过?
我正在查看一些仿真器代码,看起来芯片的寄存器没有使用位字段实现。
这是出于性能原因(或其他原因)而避免的事情吗?
是否还有使用位域的时候?(即固件放在实际芯片等)
c - 如何在 C 程序中声明一个无符号整数
在此链接上,我遇到了
http://lxr.linux.no/#linux+v2.6.36/include/linux/pci.h#L299
整数声明
unsigned int is_added:1;
我已经制作了 C 程序并在其中声明了整数,但在上面我看到使用
:
那是什么语法?
c++ - 零长度位域的实际使用
我对 C 不太确定,但 C++ 允许长度为 0 的未命名位域。例如:
- 问题一:你能想到这个有什么实际用途?
- 问题二:您知道哪些现实世界的实际用途(如果有)?
在冰罪的回答之后编辑了这个例子
编辑:好的,感谢当前的答案,我现在知道了理论目的。但问题是关于实际用途的,所以它们仍然成立:)
c - 位域的哪一端是最高有效位?
我正在使用 Visual Studio 2008 为 Windows XP/Vista/7 编写 C++ 应用程序。我的一些结构使用位字段,如示例所示。
字段的哪一端是最高有效位?
c - 你如何从位域转换为指针?
我编写了以下代码,它产生了
警告:初始化使指针从整数而不进行强制转换
或
警告:从不同大小的整数转换为指针
来自 gcc (GCC) 4.1.1 20070105 (Red Hat 4.1.1-52)
如何让警告消失?无论我尝试过什么投射,似乎总是会出现警告。
谢谢,陈兹