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)