C语言程序的小问题,背景:一个数据有两个寄存器,高八位H,低八位L,现在要将他俩合成转化成十进制的
答案:2 悬赏:70 手机版
解决时间 2021-11-11 08:47
- 提问者网友:箛茗
- 2021-11-11 04:56
C语言程序的小问题,背景:一个数据有两个寄存器,高八位H,低八位L,现在要将他俩合成转化成十进制的
最佳答案
- 五星知识达人网友:西风乍起
- 2021-11-11 05:40
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);
输出没区别。
全部回答
- 1楼网友:患得患失的劫
- 2021-11-11 05:47
这两条语句都可以实现题面的要求。设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进制数!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯