OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 大家来看下这个if语句

共6条 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:21:01    评分
2楼
最高位和次高位的状态 1100 0000 0000 0000 是这样的最高位和次高位吗?如果是这样就是0xc000了,不是0x8000,

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

专家
2014-09-22 09:52:10    评分
4楼
这样的话,你用移位,判断完次高位,移动一位,判断最高位

高工
2014-09-22 12:58:38    评分
5楼

位移再判断是不是会更合适些

强制数据类型转换只进行一次?


高工
2014-10-12 16:18:15    评分
6楼

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

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


共6条 1/1 1 跳转至

回复

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