求教一个结构位域的问题
请问有这样一个结构定义typedef struct
{
int spart:10;
int i:1;
int j:1;
int k:1;
int Reserved :3;
}CODE;
int num;
CODE *pCode = (CODE*)&(INT_NUM);
我想得到i,j,k中为1的个数(如,i,j,k都为1,num应该等于3)
,可不可以用下面的方法实现。谢谢!
for(i=0;i<3;i++)
if((INT_NUM >>(10+i)) & 0x01)
{
num++;//i,j,k为1的个数
}
----------------解决方案--------------------------------------------------------
INT_NUM是宏吗?没有定义
----------------解决方案--------------------------------------------------------
INT_NUM是一个整形变量
int INT_NUM;
----------------解决方案--------------------------------------------------------
貌似不可以,因为C里面没有规定位段具体怎么排,所以至少x86和sparc上结果就不同。
所以我看不如直接
num=pCode->i+pCode->j+pCode->k;
[[it] 本帖最后由 forever74 于 2008-4-23 01:18 编辑 [/it]]
----------------解决方案--------------------------------------------------------
typedef struct
{
int spart:10;
int i:1;
int j:1;
int k:1;
int Reserved :3;
}CODE;
int num;
CODE *pCode = (CODE*)&(INT_NUM);
不同机器结果不同
[color=white]
----------------解决方案--------------------------------------------------------