打印

我确认KEIL的BUG了,请大家鉴定一下,,去向KEIL公司要奖金去

[复制链接]
1229|4
手机看帖
扫描二维码
随时随地手机跟帖
沙发
yewuyi| | 2011-3-1 08:43 | 只看该作者
去要把,要到了别忘记请我们HAPPY。。。

使用特权

评论回复
板凳
ayb_ice| | 2011-3-1 09:35 | 只看该作者
LS
只怕没有那么多新大陆啊

使用特权

评论回复
地板
hgjinwei| | 2011-3-1 12:49 | 只看该作者
本帖最后由 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。

最后,个人认为,位域仅在读写中起作用,运算还是以相应的数据类型处理的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:冷暖自知,泰然处之;持之以恒,必有所成!

0

主题

609

帖子

2

粉丝