Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用位操作将结构值分配给其他结构值?_C_Struct_Bit Manipulation - Fatal编程技术网

C 如何使用位操作将结构值分配给其他结构值?

C 如何使用位操作将结构值分配给其他结构值?,c,struct,bit-manipulation,C,Struct,Bit Manipulation,我有一个结构如下 struct A { char x; int y; short z; }a; struct B { char ch; }b; struct C { int in; }c; struct D { short sho; }d; 我只能通过使用逐位操作来分配(a.x到b.ch),(a.y到c.in),(a.z到d.sho) 您能帮忙吗?对于任何a和x(具有相同的位长度): 这是不可能的,您不能使用位运算符分配任何内容,并且您的任务没有任何意义。(运算符

我有一个结构如下

struct A
{
  char x;
  int y;
  short z;
}a;

struct B
{
  char ch;
}b;

struct C
{
  int in;
}c;

struct D
{
  short sho;
}d;
我只能通过使用逐位操作来分配(a.x到b.ch),(a.y到c.in),(a.z到d.sho)

您能帮忙吗?

对于任何a和x(具有相同的位长度):


这是不可能的,您不能使用位运算符分配任何内容,并且您的任务没有任何意义。(运算符|=&=etc不是位运算符,而是赋值运算符,请参见C11 6.5.16。)


此外,您不应该编写像
a&0x00FFFFFFFF
这样的代码,并期望屏蔽变量a.y,因为编译器可以在结构中任意位置添加任意数量的填充字节。

,因为赋值运算符太主流了?;-)不,因为自己做家庭作业太主流了。你能根据我所问的上下文来回答吗。拜托?我是说同一个例子。不幸的是,他似乎只被允许&、|或!。至少,如果他引用了正确的家庭作业。您使用=表示数学等价。不过赋值似乎是不可避免的。对于上一条语句,您无论如何都不能对结构类型的对象执行位运算。@噢,如果您非常绝望/愚蠢,您可以在C中执行任何操作<代码>*(无符号长*)&a&0x00FFFFFFFFFFU。非常非常糟糕的代码。
x = ((a & x) | x)