2012-08-24 77 views
-4

我有一个结构如下如何使用按位运算将结构值赋值给其他结构值?

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)。

你能帮忙吗?

+9

因为赋值运算符太主流了吗? – cnicutar

+4

;-)不,因为做自己的作业太主流了。 –

回答

0

对于任何一个和x(等于位长度):

x = ((a & x) | x) 
+0

你能否在我问的上下文中回答。请? – user1611753

+0

我是指同一个例子。并使用相同的变量。 – user1611753

+0

可悲的是他似乎只允许&,|要么 !。至少,如果他引用他的家庭作业的权利。您正在使用= –

0

这是不可能的,你可以不使用位运算符分配任何东西,你的任务没有任何意义。 (运算符| = & =等不按位运算符,它们是赋值运算符,见C11 6.5.16)

而且,你不应该写代码像a & 0x00FFFFFFFF并期望屏蔽掉变量唉,因为编译器可以在结构中的任何位置随意添加任意数量的填充字节。

+0

对于您的最后一条语句,您可以不对结构类型的对象执行按位操作。 – ouah

+0

@ouah如果你绝望/愚蠢,你可以用C做任何事情。 '*(unsigned long long *)&a&0x00FFFFFFFFu'。真的,真的很糟糕的代码。 – Lundin