数据按位赋值 至0 至1
由于编译器默认signed int即32位有符号整数类型,而1<<31实际为0x80000000,
这样就有可能改写了符号位(最高位)
依此类推,(2<<30),(3<<29)...等都会出现编译警告问题.
解决办法为: ((unsigned int)1<<31),((unsigned int)2<<30),...
点击查看代码
#include "stdio.h"
unsigned int flag_InitChangeMCUData = 0xffffffff ;
unsigned char i = 0 ;
int main(void)
{
for(i=0;i<32;i++)
{
flag_InitChangeMCUData &= ~(0x01<<i);// 将不需要读取的参数值 标志位至 0
printf("%d: 0x%x ",i,flag_InitChangeMCUData);
if((i%4)==0) printf("\n");
}
printf("\n/*****************************************************************/\n");
for(i=0;i<32;i++)
{
flag_InitChangeMCUData |= 0x01<<i; //如果超时,将超时标志位至1
printf("%d: 0x%x ",i,flag_InitChangeMCUData);
if((i%4)==0) printf("\n");
}
printf("\n/*****************************************************************/\n");
for(i=0;i<32;i++)
{
if(i==31 )
flag_InitChangeMCUData &= ~0x80000000;// 将不需要读取的参数值 标志位至 0
else
flag_InitChangeMCUData &= ~(0x01<<i);// 将不需要读取的参数值 标志位至 0
printf("%d: 0x%x ",i,flag_InitChangeMCUData);
if((i%4)==0) printf("\n");
}
printf("\n/*****************************************************************/\n");
for(i=0;i<32;i++)
{
if(i==31 )
flag_InitChangeMCUData |= 0x80000000;//如果超时,将超时标志位至1
else
flag_InitChangeMCUData |= 0x01<<i; //如果超时,将超时标志位至1
printf("%d: 0x%x ",i,flag_InitChangeMCUData);
if((i%4)==0) printf("\n");
}
printf("\n/*****************************************************************/\n");
}
分类:
嵌入式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了