标签: bit-fields

使用-1将所有位设置为true是否安全?

我已经看到这种模式在C&C++中使用了很多.

unsigned int flags = -1;  // all bits are true
Run Code Online (Sandbox Code Playgroud)

这是一个很好的便携式方法吗?或正在使用0xffffffff~0更好?

c c++ binary bit-fields

130
推荐指数
9
解决办法
3万
查看次数

为什么要为一个不给出相同值的位字段赋值?

我在Quora帖子中看到了以下代码:

#include <stdio.h>

struct mystruct { int enabled:1; };
int main()
{
  struct mystruct s;
  s.enabled = 1;
  if(s.enabled == 1)
    printf("Is enabled\n"); // --> we think this to be printed
  else
    printf("Is disabled !!\n");
}
Run Code Online (Sandbox Code Playgroud)

在C&C++中,代码的输出都是意外的,

被禁用 !!

虽然在那篇文章中给出了"符号位"相关的解释,但是我无法理解,我们如何设置某些内容然后它没有反映出来.

有人可以给出更详细的解释吗?


注意:标签都是必需的,因为它们的标准在描述位字段时略有不同.请参阅C规范C++规范的答案.

c c++ bit-fields signed-integer implementation-defined-behavior

95
推荐指数
5
解决办法
5152
查看次数

C#中的位字段

我有一个结构,我需要填充和写入磁盘(实际上几个).

一个例子是:

byte-6    
bit0 - original_or_copy  
bit1 - copyright  
bit2 - data_alignment_indicator  
bit3 - PES_priority  
bit4-bit5 - PES_scrambling control.  
bit6-bit7 - reserved  
Run Code Online (Sandbox Code Playgroud)

在CI中可能会执行以下操作:

struct PESHeader  {
    unsigned reserved:2;
    unsigned scrambling_control:2;
    unsigned priority:1;
    unsigned data_alignment_indicator:1;
    unsigned copyright:1;
    unsigned original_or_copy:1;
};
Run Code Online (Sandbox Code Playgroud)

有没有办法在C#中做到这一点,使我能够使用struct dereferencing点运算符访问位?

对于几个结构,我可以在访问器函数中进行包裹移位.

我有很多结构要以这种方式处理,所以我正在寻找一些更容易阅读和更快写的东西.

c# bit-fields

75
推荐指数
8
解决办法
9万
查看次数

在1字节内存储8个逻辑真/假值?

我正在研发一个只有2KB SRAM的微控制器,并且迫切需要节省一些内存.试图找出如何使用位域将8 0/ 1值放入单个字节但不能完全解决的问题.

struct Bits
{
    int8_t b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1;
};

int main(){
    Bits b;
    b.b0 = 0;
    b.b1 = 1;

    cout << (int)b.b0; // outputs 0, correct
    cout << (int)b.b1; // outputs -1, should be outputting 1
}
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?

c++ bit-fields

64
推荐指数
2
解决办法
3759
查看次数

结构或联合中的'unsigned temp:3'是什么意思?

可能重复:
这个C++代码是什么意思?

我正在尝试使用JNA将C结构映射到Java.我遇到了一些我从未见过的东西.

struct定义如下:

struct op 
{
    unsigned op_type:9;  //---> what does this mean? 
    unsigned op_opt:1; 
    unsigned op_latefree:1; 
    unsigned op_latefreed:1; 
    unsigned op_attached:1; 
    unsigned op_spare:3; 
    U8 op_flags; 
    U8 op_private;
};
Run Code Online (Sandbox Code Playgroud)

你可以看到一些变量被定义为unsigned op_attached:1,我不确定这意味着什么.这会影响为这个特定变量分配的字节数吗?

c c++ colon bit-fields

57
推荐指数
3
解决办法
1万
查看次数

为什么bit endianness是bitfields中的一个问题?

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

据我所知,bitfields纯粹是编译器构造,用于促进位级操作.

例如,考虑以下位域:

struct ParsedInt {
    unsigned int f1:1;
    unsigned int f2:3;
    unsigned int f3:4;
};
uint8_t i;
struct ParsedInt *d = &i;
只是一种简洁易懂的说法d->f2.

但是,无论架构如何,位操作都是明确定义的并且可以正常工作.那么,bitfields怎么不便携?

c portability cross-platform low-level bit-fields

54
推荐指数
4
解决办法
3万
查看次数

何时值得使用位字段?

是否值得使用C的位域实现?如果是的话,什么时候使用?

我正在查看一些仿真器代码,看起来芯片的寄存器没有使用位字段实现.

这是出于性能原因(或其他原因)而避免的吗?

是否仍然使用位字段?(即固件放在实际芯片上等)

c c++ bit-fields

48
推荐指数
5
解决办法
2万
查看次数

Python有比特字段类型吗?

我需要一个布尔数组的紧凑表示,Python有内置的位域类型还是我需要找到一个替代解决方案?

python bitarray bit-fields

44
推荐指数
6
解决办法
4万
查看次数

结构声明中的冒号是什么意思,例如:1,:7,:16或:32?

以下C++代码是什么意思?

unsigned char a : 1; 
unsigned char b : 7;
Run Code Online (Sandbox Code Playgroud)

我猜它会创建两个char a和b,并且它们都应该是一个字节长,但我不知道":1"和":7"部分是做什么的.

c c++ bit-fields

42
推荐指数
2
解决办法
4158
查看次数

在C中,冒号在声明中意味着什么?

可能重复:
'unsigned temp:3'表示什么

我正在学习一些内核代码,并且出现在以下行中(在linux 2.4中,sched.h,struct mm_struct):

unsigned dumpable:1;
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

c colon bit-fields

42
推荐指数
2
解决办法
2万
查看次数