float DS18B20_Get_Temp(void)
{
u8 temp;
u8 TL,TH;
float tem;
float c;
DS18B20_Start (); // ds1820 start convert
DS18B20_Rst();
DS18B20_Check();
DS18B20_Write_Byte(0xcc);// skip rom
DS18B20_Write_Byte(0xbe);// convert
TL=DS18B20_Read_Byte(); // LSB
TH=DS18B20_Read_Byte(); // MSB
if(TH>7)
{
TH=~TH;
TL=~TL;
temp=0;//温度为负
}else temp=1;//温度为正
tem=TH; //获得高八位
tem<<=8;
tem+=TL;//获得底八位
tem=(double)tem*0.625f;//转换
if(temp)
{
c= 331.45f+0.606f*tem;//补偿后的声速
return c; //返回温度值
}
else
{
c= 331.45f-0.606f*tem;//补偿后的声速
return c;//返回温度值
}
}
老师们tem<<=8;这一句一直报错expression must have integral type是怎么回事啊
tem<<=8;这条语句之所以报错是因为tem变量是float类型,改为int类型就可以了。
tem<<=8;这条语句之所以报错是因为tem变量是float类型,改为int类型就可以了。
造成这种语法错误的原因主要是操作符两侧的数据类型不统一,或者是不符合操作符的数据类型要求;
例如:
int j = i%pow(10,n/2); 在pow前面没有加上int,程序里可能就会报错;
修改如下:
int j = i%(int)pow(10,n/2); // 加上强制类型转换,%的操作数必须是整数
这样的话就没有错误了;
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y