jianhong_wu 发表于 2014-9-19 09:48:15

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

本帖最后由 jianhong_wu 于 2014-9-19 09:49 编辑

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

鸿哥解答:
在C51中,可以把两个char类型数据合并成一个int类型数据。比如:

unsigned char ucAD_H=0x02;//寄存器高8位
unsigned charucAD_L=0x12; //寄存器低8位
unsigned int   uiResultAD; //用来合并两个char类型数据的变量

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

karo 发表于 2014-9-19 09:56:18

谢谢鸿哥,,怎么取舍高位或者低位? 比如结果是101101011101,我只需要高八位的话,是不是直接&0xff ?然后其结果是 101101010000 吗? 不还是12位嘛?

karo 发表于 2014-9-19 09:58:04

如果直接把int赋值给char的话,是不是后面的4位自动舍弃了?就变成10110101了?

jianhong_wu 发表于 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;

karo 发表于 2014-9-19 11:26:59

了解了,谢谢鸿哥
页: [1]
查看完整版本: 怎么样把两个8位的char类型寄存器合并成一个16位的int类型数据?