帮忙看一下,两种写法结果不同的原因?

[复制链接]
 楼主| doob 发表于 2009-10-19 23:27 | 显示全部楼层 |阅读模式
UINT8   OUT_TempX;
UINT16   OUT_XNum;
1//OUT_TempX=0xfe;
1//OUT_XNum=~OUT_TempX+1;   
2:OUT_XNum=0x02;
Num_X=(OUT_XNum/8)*18;


PrintHex(OUT_XNum);
PrintHex(Num_X);

结果1:0x02 0xc0
结果2:0x02 0x00
hou 发表于 2009-10-20 00:37 | 显示全部楼层
Num_X在哪里定义的?
 楼主| doob 发表于 2009-10-20 07:17 | 显示全部楼层
奥,忘记贴了!
UINT16   OUT_XNum;

void PrintHex(UINT8 x)  
打印是八位的,写法不规范,但不知道
OUT_XNum 的值为什么结果会不同?
ejack 发表于 2009-10-20 07:38 | 显示全部楼层
OUT_XNum是UINT16型。写法一中的第2句导致隐含的类型转换。
~OUT_TempX的中间结果是0xFF01,而非你所预期的0x01
 楼主| doob 发表于 2009-10-20 07:44 | 显示全部楼层
本帖最后由 doob 于 2009-10-20 07:50 编辑

奥,这样啊,谢谢;
如何写才能实现uint8取反,再赋给uint16呢?
因为我在做累加,最后结果需要16bit;
hyg1984 发表于 2009-10-20 10:45 | 显示全部楼层
我看得有点晕乎乎的。。。。。。
累加嘛,uint16 = uint16 + 累加量;这不行吗?
取反嘛,uint8 = ~uint8;    赋给uint16嘛。。uint16 = uint16 | uint8;
好像写着写着,有点无意义,你最好举个例子来问问
 楼主| doob 发表于 2009-10-20 16:47 | 显示全部楼层
呵呵,我为了省寄存器空间!

UINT8   OUT_TempX;
UINT16   OUT_XNum;

OUT_TempX=0xfe;
OUT_XNum=~OUT_TempX+1;   //注意:此句导致隐含类型转换;

我的预期是想:OUT_XNum值为:0x0002;
但结果是 ejack 所说的0xff02;
看来我的基础知识太不扎实了!自责!掐大腿一次!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

165

主题

1113

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部