独闷闷网
标题:
怎么样把两个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