报错expression must have integral type

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