在单片机Keil C中如何进行位长的转换?

来源:百度知道 编辑:UC知道 时间:2024/05/22 17:52:17
在Keil C中,如何将一个16位的整型数拆分成高低两个8位的数?
在Keil C中,如何将一个高低两个8位的数合并成一个16位的数?
int ISP_ADDR
char ISP_ADDRH
char ISP_ADDRL
我要如何才能将ISP_ADDR中的数值拆分成高低8位,高8位放入ISP_ADDRH,
低8位放入ISP_ADDRL?
反过来,我要如何才能将高8位ISP_ADDRH和低8位ISP_ADDRL合并成一个
16位数放入ISP_ADDR?
最好给我带有注释的程序?

呵呵这个题目10分低了点。
可以这样:ISP_ADDRH=ISP_ADDR/256;//高8位除以256得到,也可以>>8得到
ISP_ADDRL=ISP_ADDR//低8位直接传送不需要数据类型转换

反过来也简单:ISP_ADDR=ISP_ADDRH;把地址高字节给INT变量
ISP_ADDR<<8;//左移8位就是乘256的意思
ISP_ADDR+=ISP_ADDRL;加上地址低8位数据

//ISP_ADDR中的数值拆分成高低8位,高8位放入ISP_ADDRH,
低8位放入ISP_ADDRL
int ISP_ADDR,i
char ISP_ADDRH
char ISP_ADDRL

i = ISP_ADDR & 0xff00;
i >>= 8;
ISP_ADDRH = (char)i;
i = ISP_ADDR & 0x00ff;
ISP_ADDRL = (char)i;

//位ISP_ADDRH和低8位ISP_ADDRL合并成一个
16位数放入ISP_ADDR

int ISP_ADDR,i,j;
char ISP_ADDRH;
char ISP_ADDRL;

i = (int)ISP_ADDRH;
i <<= 8;
j = (int)ISP_ADDRL;
ISP_ADDR = i | j;

其实根本不用编程计算,把你说的那三个变量放到一个【联合】中就可以了,【联合】就是专门做这个的。