这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 大家来看下这个if语句

共3条 1/1 1 跳转至

大家来看下这个if语句

高工
2014-09-21 14:06:25     打赏
  if(((uint16)(sArmAndDspData.Dsp2Arm[513]) & 0x8000 == 0x0000)&&((sArmAndDspData.Dsp2Arm[513]) & 0x4000 == 0x0000)) //00 00 正常
  {
    CV_ON();CC_ON();
  }
  else
  {

    CV_OFF();CC_OFF();

  }

注释:

    判断uint16类型的全局变量sArmAndDspData.Dsp2Arm[513]的最高位和次高位的状态,如果全是‘0‘,则执行ON语句,否则执行OFF语句。

实验现象:

    在线调试,无论数据位的高低,直接跳过的判断语句,执行OFF语句。

分析:

    if中的表达式永远不成立,难道判断表达式 (uint16)(sArmAndDspData.Dsp2Arm[513]) & 0x8000 == 0x0000这样不可以么?




关键词: if表达式    

高工
2014-09-21 14:40:00     打赏
2楼
是的,我开始是这么写的,因为还有10,01,11的情况,所以后来把最高位和次高位分开判断了。但是不管怎么写调试时现象都是一样的。

高工
2014-10-12 16:18:15     打赏
3楼

这个问题终于找到解答了,应该将变换和运算之后的数据整体做强制类型转换之后才可以和0相比较。

归根结底还是有符号数不能和0相比较的问题


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]