用VS2003了一个MFC对话框程序,上面有个文本框,关联了一个float型的变量m_f,输入的值是145。还有一个按钮,点击按钮后执行下面的语句。
UpdateData(true);
char c1=(unsigned short(m_f*100)>>0x08)&0xff;
char c2=(unsigned short(m_f*100))&0xff;1.在debug状态下,c1的值是56,c2的值是-92.
  在release状态下,c1和c2的值变得一样,都是-92.
2.如果将代码改为
UpdateData(true);
m_f=145.00000f;//加了这一
char c1=(unsigned short(m_f*100)>>0x08)&0xff;
char c2=(unsigned short(m_f*100))&0xff;则不管是debug还是release状态,c1的值都是56,而c2的值是-92.  请教为什么会出现上面的情况,望各位兄弟讲解一下。

解决方案 »

  1.   

    如果将char c1=(unsigned short(m_f*100)>>0x08)&0xff;
    该为
    char c1=(short(m_f*100)>>0x08)&0xff;
    或者
    char c1=(unsigned int(m_f*100)>>0x08)&0xff;则c1的值也是56,c2的值是-92. 
      

  2.   

    在类型转换的过程中,会出现数据的变换误差。
    尤其是操作内存的时候,系统是不会自动去检测内存中数据的类型的,而只有到了需要操作的时候才会出现。
    如果不是2楼的错误的话,你可以试试以下的方法,我觉得你可以用下面的方法规避错误:
    unsigned short usTemp = (unsigned short)m_f;char c1=(unsigned short(usTemp *100)>>0x08)&0xff;
    char c2=(unsigned short(usTemp *100))&0xff;
      

  3.   

    楼上的方法是可以的,就是想知道的再具体些,是怎么个过程导致了这样的错误,又为什么debug的时候和release的时候结果不一致。
      

  4.   

    楼上的方法是可以的,就是想知道的再具体些,是怎么个过程导致了这样的错误,又为什么debug的时候和release的时候结果不一致。