C语言解决位运算问题

现有一个嵌入式设备终端传输过来的数据包是一个32位无符号的整型数,这个数据包里面各位含义如下:(位运算)

00-07位:表示温度数据
08-15位:表示湿度数据
16-19位:表示4扇门状态(门的编号0-3)
20-23位:表示四盏灯的状态(灯编号0-3)
24-31位:预留备用
下面是最近一段时间接受的数据包:

请编写一个程序接收这3个数据包,并解析出对应的数据【温度,湿度,门0-3,灯0-3】(门和灯的状态0-关,1-开)。

代码如下:

#include <stdio.h>
 
#define temp 0x000000FF
#define humi 0x0000FF00
#define door0 0x00010000
#define door1 0x00020000
#define door2 0x00040000
#define door3 0x00080000
#define light0 0x00100000
#define light1 0x00200000
#define light2 0x00400000
#define light3 0x00800000
#define prepare 0xff000000
int main(int argc, char const *argv[])
{
    unsigned int data, i, n;
    
   
    for (i = 0;i < 3;i++)
    {
    printf("请输入接收数据:\n");
    scanf("%x",&data);
    printf("当前温度:%d℃\n",data & 0xff);
    printf("当前湿度:%dRH\n",(data >> 8) & 0xff);
   
    printf("门0: %s\t", (data & door0) ? "开":"关");
    printf("门1: %s\t", (data & door1) ? "开":"关");
    printf("门2: %s\t", (data & door2) ? "开":"关");
    printf("门3: %s\n", (data & door3) ? "开":"关");
 
    printf("灯0: %s\t", (data & light0) ? "亮":"灭");
    printf("灯1: %s\t", (data & light1) ? "亮":"灭");
    printf("灯2: %s\t", (data & light2) ? "亮":"灭");
    printf("灯3: %s\n", (data & light3) ? "亮":"灭");
    }
   
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值