c – 枚举类型的按位运算
发布时间:2020-12-16 07:25:20 所属栏目:百科 来源:网络整理
导读:在尝试通过以下代码将内存中的数据读入枚举时,我得到了这些奇怪的结果: void read_memory (const unsigned,const unsigned,unsigned* const);/* ... */enum {DATA_0,DATA_1,DATA_2} data;read_memory(base_addr,offset,data); //data = 0x0900data = 8; //d
在尝试通过以下代码将内存中的数据读入枚举时,我得到了这些奇怪的结果:
void read_memory (const unsigned,const unsigned,unsigned* const); /* ... */ enum {DATA_0,DATA_1,DATA_2} data; read_memory(base_addr,offset,&data); //data = 0x0900 data >>= 8; //data = 0x7e000000 我通过引入一个无符号类型的临时变量来解决这个问题.但我想确定理解为什么以前的方法不起作用. 首先,我知道标准不需要枚举类型的特定宽度,只要可以表示所有成员.事实上,6.7.2.2规定:
但是,由于从内存中读取的原始数据符合char,我认为这应该不是问题. 那问题出在哪里呢? 解决方法
您的(在我看来,名称很糟糕)read_memory()函数读取了多少数据?如果这与sizeof数据的值不同,则表示存在问题.仅仅因为枚举值对于char来说足够小并不意味着编译器必须选择一个char;或许用于操纵整数数字的指令更快,和/或存在对齐问题.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |