请问是否有可能使用C90编译器将一种类型的位域赋值给另一种类型?
以下是位域的结构体:
typedef struct{
unsigned int ERA:2;
unsigned int destar:2;
unsigned int srcar:2;
unsigned int opcode:4;
unsigned int grp:2;
unsigned int dumy:3;
} Command;
typedef struct{
unsigned int cell:15;
} Word;
以下是主程序:
int main(int argc, const char * argv[]){
Word word;
Command cmd;
cmd.grp = 2;
word = cmd;
}
假设我有这15个位元:
我们按照以下顺序排列它们:
命令:
Dumy | grp | opcode | srcar | destar | ERA
0 0 0 0 1 0 0 0 1 10 0 0 0 0
单词:
| word |
000000000000000
目标是使单词等于整个命令(word = command
),所以我们会看到这样的结果:
| word |
000010001100000
word = cmd;
将一个结构变量分配给不兼容的变量。word.cell = cmd.ERA;
将一个位域分配给另一个位域。没有进行强制转换。 - chux - Reinstate Monica