独闷闷网

标题: 怎么样把两个8位的char类型寄存器合并成一个16位的int类型数据? [打印本页]

作者: jianhong_wu    时间: 2014-9-19 09:48
标题: 怎么样把两个8位的char类型寄存器合并成一个16位的int类型数据?
本帖最后由 jianhong_wu 于 2014-9-19 09:49 编辑

土豆づMr.--浙江:
请问12位AD的值分在两个寄存器里面。怎么合并和比较这个值啊,8位的我知道直接读出来比较就行了。

鸿哥解答:
在C51中,可以把两个char类型数据合并成一个int类型数据。比如:
[mw_shl_code=c,true]
unsigned char ucAD_H=0x02;  //寄存器高8位
unsigned char  ucAD_L=0x12; //寄存器低8位
unsigned int   uiResultAD; //用来合并两个char类型数据的变量

uiResultAD=ucAD_H; //赋值高位
uiResultAD=uiResultAD<<8; //把高位移动到高8位
uiResultAD=uiResultAD+ ucAD_L; //再合并低8位[/mw_shl_code]


作者: karo    时间: 2014-9-19 09:56
谢谢鸿哥,,怎么取舍高位或者低位? 比如结果是101101011101,我只需要高八位的话,是不是直接&0xff ?  然后其结果是 101101010000 吗? 不还是12位嘛?
作者: karo    时间: 2014-9-19 09:58
如果直接把int赋值给char的话,是不是后面的4位自动舍弃了?就变成  10110101了?
作者: jianhong_wu    时间: 2014-9-19 10:01
本帖最后由 jianhong_wu 于 2014-9-19 10:14 编辑
karo 发表于 2014-9-19 09:56
谢谢鸿哥,,怎么取舍高位或者低位? 比如结果是101101011101,我只需要高八位的话,是不是直接&0xff ?   ...

如果你只要高8位的话,因为原来有效的数据是12位,所以你直接向右移动4位就可以了。比如:
unsigned int a;
a=a>>4;
作者: karo    时间: 2014-9-19 11:26
了解了,谢谢鸿哥




欢迎光临 独闷闷网 (http://dumenmen.com/) Powered by Discuz! X3.2