本帖最后由 hgjinwei 于 2011-3-1 13:07 编辑
提提我一点不成熟的看法,
struct {
uchr b_1 : 1;
uchr b_2 : 1;
uchr b_3 : 1;
uchr b_4 : 1;
uchr t_1 : 1;
uchr t_2 : 1;
uchr t_3 : 1;
uchr t_4 : 1;
}pin = {1,0,0,0};
看这个式子:pin.t_4 = ((~pin.b_1) && (~pin.b_2));
首先,pin.b_1和pin.p_2是一个uchr 类型,其次才是位域。那么,他的运算应该是以uchr类型运算的。
也就是说,
如果,pin.b_1 = 1;
uchr x = pin.b_1 + 1,那么他的结果是 2,而不是0;
uchr x = pin.b_1 + pin.b_1 的结果也是2,同样不是0;
那么 uchr x = ~pin.b_1,的结果也就应该是 0xfe了(假设你的 uchr 是 unsigned char);
所以,((~pin.b_1) && (~pin.b_2)) = 0xfe && 0xff <=> 1;
之后,1再赋值给pin.t_4,
即 pin.t_4 = ((~pin.b_1) && (~pin.b_2)) = 1 & 0x01 = 1。
最后,个人认为,位域仅在读写中起作用,运算还是以相应的数据类型处理的。 |