C语言程序的小问题,背景:一个数据有两个寄存器,高八位H,低八位L,现在要将他俩合成转化成十进制的 100

C语言程序的小问题,背景:一个数据有两个寄存器,高八位H,低八位L,现在要将他俩合成转化成十进制的数。有这样的程序代码:inttemp=(H<<8)|L;有没有大神可以详... C语言程序的小问题,背景:一个数据有两个寄存器,高八位H,低八位L,现在要将他俩合成转化成十进制的数。有这样的程序代码: int temp =(H<<8)|L; 有没有大神可以详细讲解一下这段代码的意思? 另外还有人这么写 int temp =(H<<8)+L; 请问这两个代码有什么区别? 给高追加分!
是单片机的编程,使用,keil ,
展开
 我来答
金色潜鸟
2014-08-18 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5634万
展开全部
int temp =(H<<8)|L; 声明 temp 是整型变量,初始化为 表达式 (H<<8)|L 的 值。
H 是 高位的 整型数值 -- unsigned char.
L 是 低位的 整型数值 -- unsigned char.
H<<8 H 左移(二进制)八位。
| 是 按位加 (按位" 或" )
(H<<8)|L 用位运算方法 构成 unsigned short int 再 转换为 int 型
-----------------------------------
int temp =(H<<8)+ L;
这里用 加法运算,理论上 也可以。位运算速度快一点。
===========================
unsigned char H=0xff, L=0xaa;
int temp =(H<<8) + L;
printf("%#x %d\n",temp,temp);
temp =(H<<8) | L;
printf("%#x %d",temp,temp);

输出没区别。
White_MouseYBZ
2014-08-19 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6529万
展开全部
这两条语句都可以实现题面的要求。设H寄存器中为XXXXXXXX,L寄存器中为yyyyyyyy,则有:
(H<<8)|L写成二进制数据是XXXXXXXX00000000 | yyyyyyyy,结果是XXXXXXXXyyyyyyyy;

(H<<8)+L写成二进制数据是XXXXXXXX00000000 + yyyyyyyy,结果也是XXXXXXXXyyyyyyyy。

但有一点要注意,就是原先的高8位和低8位只要这样简单组合就确实是你需要的10进制数!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式