独闷闷网

 找回密码
 立即注册
搜索
查看: 3797|回复: 4
收起左侧

[原创] 怎么样把两个8位的char类型寄存器合并成一个16位的int类型数据?

[复制链接]
发表于 2014-9-19 09:48:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 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]

乐于分享,勇于质疑!
发表于 2014-9-19 09:56:18 | 显示全部楼层
谢谢鸿哥,,怎么取舍高位或者低位? 比如结果是101101011101,我只需要高八位的话,是不是直接&0xff ?  然后其结果是 101101010000 吗? 不还是12位嘛?
乐于分享,勇于质疑!
发表于 2014-9-19 09:58:04 | 显示全部楼层
如果直接把int赋值给char的话,是不是后面的4位自动舍弃了?就变成  10110101了?
乐于分享,勇于质疑!
 楼主| 发表于 2014-9-19 10:01:38 | 显示全部楼层
本帖最后由 jianhong_wu 于 2014-9-19 10:14 编辑
karo 发表于 2014-9-19 09:56
谢谢鸿哥,,怎么取舍高位或者低位? 比如结果是101101011101,我只需要高八位的话,是不是直接&0xff ?   ...

如果你只要高8位的话,因为原来有效的数据是12位,所以你直接向右移动4位就可以了。比如:
unsigned int a;
a=a>>4;
乐于分享,勇于质疑!
发表于 2014-9-19 11:26:59 | 显示全部楼层
了解了,谢谢鸿哥
乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-3-29 00:35 , Processed in 0.191136 second(s), 17 queries .

快速回复 返回顶部 返回列表