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 , 展开
是单片机的编程,使用,keil , 展开
展开全部
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);
输出没区别。
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);
输出没区别。
展开全部
这两条语句都可以实现题面的要求。设H寄存器中为XXXXXXXX,L寄存器中为yyyyyyyy,则有:
(H<<8)|L写成二进制数据是XXXXXXXX00000000 | yyyyyyyy,结果是XXXXXXXXyyyyyyyy;
(H<<8)+L写成二进制数据是XXXXXXXX00000000 + yyyyyyyy,结果也是XXXXXXXXyyyyyyyy。
但有一点要注意,就是原先的高8位和低8位只要这样简单组合就确实是你需要的10进制数!
(H<<8)|L写成二进制数据是XXXXXXXX00000000 | yyyyyyyy,结果是XXXXXXXXyyyyyyyy;
(H<<8)+L写成二进制数据是XXXXXXXX00000000 + yyyyyyyy,结果也是XXXXXXXXyyyyyyyy。
但有一点要注意,就是原先的高8位和低8位只要这样简单组合就确实是你需要的10进制数!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询